【发布时间】:2016-04-27 00:38:25
【问题描述】:
我正在尝试使用 ajax 在 Laravel 应用程序中发出 DELETE 请求
我有一个功能可以向资源发出请求 - 使用正确的动词 - 但不断出现不允许的方法:
这是我的 ajax 请求:
$.ajax({
type: 'DELETE',
url:'/user/58',
data: {
'_method': 'DELETE',
'id': id
},
dataType: 'json',
success: function (data) {
// do something with ajax data
if (data.result) {
return true;
}
return false;
},
error: function (xhr, ajaxOptions, thrownError) {
console.log('error...', xhr);
return false;
//error logging
},
complete: function () {
//afer ajax call is completed
}
});
id 在函数中提供,测试为 58。
在 Chrome 中观看网络面板,我可以看到它以 user/58 的预期 URL 开头,但随后很快缩短为 user
我知道要获取资源路由以获取请求,它需要是 user/58 和方法 DELETE,因此它将转到 destroy 方法,因此它被路由到 Index 方法,该方法需要GET 请求,因此该方法不允许。
为什么我的请求网址被更改了?
在 Laravel 中发出 DELETE 请求的正确方法是什么?
谢谢
编辑: 这是我的路线:
Route::group( [ 'middleware' => [ 'auth' , 'admin' ] ] , function ()
{
Route::resource( 'user' , 'UserController' );
} );
在标头中处理 csrf 令牌 - 可以肯定这不是问题的原因,因为我没有收到无效令牌异常
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
谢谢
【问题讨论】:
-
"为什么我的请求 url 被更改了?" — 大概是因为服务器响应一个 Location 标头来重定向请求。
-
请问您能出示您的
routes.php和Controller 文件吗? -
在使用 Ajax 时,是否有任何类型的对 URL 的身份验证检查可能会失败?你想过需要的 CSRF Token 吗?见laravel.com/docs/5.2/routing#csrf-x-csrf-token