输入按钮/锚链接提交表单,其中指定了 POST



我正在将一个过程PHP应用程序转换为RESTful Laravel/jQuery应用程序。我做了一些广泛的研究,但所有建议都失败了,下面就包括了。

在旧版本中,新记录的创建是通过将页面 URL 与 ?添加为 GET 变量:

<div class="dropdown">
<button id="BtnID">File</button>
<div class="dropdown-content">
<a href="./?Add">Add New</a>
<a href="...">More menu items</a>
</div>
</div>

根据Laravel标准,我正在尝试向页面发布请求,因此我将菜单更改为:

<div class="dropdown">
<button id="BtnID">File</button>
<div class="dropdown-content">
<form id="AddNew">
<!--<a id="Add" href="#">Add New</a>-->
<!--input type='button' id='Add' value='Add New' /><!--Suggested change - also not working-->
<input type='submit' id='Add' value='Add New' /><!--Another suggested change - also not working-->
</form>
<a href="...">More menu items</a>
</div>
</div>

j查询:

$('#Add').on('click',function(e) {
e.preventDefault;
if(confirm('some text'))
$('#AddNew').submit();
return false;
});
$('#AddNew').append(CSRF);
$('#AddNew').attr('action','./');
$('#AddNew').attr('method','post');

谁能帮我弄清楚为什么此表格拒绝发布请求?确认消息出现,然后导航到正确的页面,但应用程序向其发出 GET 请求? 我注意到 CSRF 令牌输入没有显示在 URL 中,正如我对 GET 请求所期望的那样。

编辑根据要求,以下是与此页面关联的路由:

//  Route::get('/SubDirectory/ThisPage/','ThisController@index'); Usually forwards to first page, but commented out for testing this
Route::get('/SubDirectory/ThisPage/{PageNr}', 'ThisController@edit');
Route::post('/SubDirectory/ThisPage/', 'ThisController@add');
Route::delete('/SubDirectory/ThisPage/{ID}', 'ThisController@destroy');
Route::patch('/SubDirectory/ThisPage/{ID}', 'ThisController@update');

HTML表单是使用具有提交类型的输入或按钮提交的。您不应该使用链接来提交表单,但是如果您热衷于提交带有链接的表单,则可以使用带有属性onclick="form.submit();"的链接。请注意,如果您使用此方法,它将不适用于不支持 javascript 的用户。

我认为您缺少导致问题的CSRF令牌。工作示例在这里

$('#Add').on('click',function(e) {
e.preventDefault;
if(confirm('some text'))
$('#AddNew').submit();
return false;
});
$(document).ready(function(){
$('#AddNew').append('<input type="hidden" name="_token" value="'+$('meta[name="csrf-token"]').attr('content')+'" />');
$('#AddNew').attr('action','./');
$('#AddNew').attr('method','post');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<head>
<title>Title</title>
<meta name="csrf-token" content="73ijdnnxyis7o3jr">
</head>
<body>
<div class="dropdown">
<button id="BtnID">File</button>
<div class="dropdown-content">
<form id="AddNew">
<a id="Add" href="#">Add New</a>
</form>
<a href="...">More menu items</a>
</div>
</div>
</body>
</html>

我发现这不喜欢使用"./"作为操作目标。我将操作属性更改为完整的 URL"/SubDirectory/ThisPage",现在可以工作了。

最新更新