【发布时间】:2015-07-06 02:49:56
【问题描述】:
我使用 laravel 控制器创建了一个 RESTful API。我有一个PhotosController,它有一个destroy($id) 删除资源的方法。我还有一段 javascript 代码向我的应用程序发送 DELETE 请求。结果应该是删除带有$id id 的照片。但是 laravel 不会将我的请求路由到 destroy 方法。而是发送 401 Unauthorized 错误。
问题是我想通过Ajax 向我的应用发送DELETE 请求,但是laravel 不允许我的请求被路由!
routes.php 文件:
Route::resource('photos', 'PhotosController');
销毁方法:
public function destroy($id)
{
try{
unlink($_SERVER["DOCUMENT_ROOT"].'/uploads/doctors/' . $id);
Session::forget('photo');
$msg = Notification::where('flag', 's')->where('code', 'user-update-delete-photo-gallery')->first()->msg;
return Response::json(array('success' => $msg));
}catch (Exception $e){
App::abort(500, $e->getMessage());
}
}
我的 Ajax 请求:
$.ajax(
{
url: "/photos/" + name,
method : "DELETE", // Or POST : result is the same
data :{
_token : $("input[name=_token]").val(),
_method : 'DELETE'
},
success: function(data, textStatus, jqXHR ){
parent.replaceWith("");
toastr.success(data['success']);
$("#overlay").hide();
},
beforeSend : function(jqXHR, settings ){
$("#overlay").show();
},
error : function(jqXHR, textStatus, errorThrown ){
toastr.error(jqXHR.responseText);
$("#overlay").hide();
}
}
);
感谢您的帮助。
【问题讨论】:
-
可能是因为请求使用了
method : "DELETE"。我认为该应用程序可能正在等待 POST。数据数组中的_method : 'DELETE'不是应该处理这个问题吗? -
@Don'tPanic 感谢您的参与。我用过
POST,但结果是一样的。 -
还有一点,资源控制器方法名不是需要在HTTP方法前加前缀吗?
-
@Don'tPanic 不,在 Laravel 4.2 中没有必要这样做。看看Laravel Documentation
-
你确定吗?我只是在看here,特别是。它说“接下来,只需将方法添加到您的控制器,以它们响应的 HTTP 动词为前缀:”
标签: php jquery ajax rest laravel