我正在尝试在 laravel5 中使用 jquery ajax。实际上一直发生的是consolelog给我一个内部服务器错误500
。我找到了一些 csrf 解决方案并将它们添加到我的代码中,但它们对我没有帮助。有什么想法吗?
$('.takImg').click(function(){
var photoId = $(this).parent().attr('id');
$.ajax({
type : "POST",
url : "/save_like",
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
data: {photoId : photoId},
success : function(msg) {
console.log(msg);
},
complete : function(r) {
console.log(r);
},
error: function(error) {
console.log(error);
}
});
});
我还将这个元添加到我的头上:
<meta name="csrf_token" content="{{ csrf_token() }}" />
一切都经过路线:
`Route::any('/save_like', 'Controller@saveLike');`
至 Controller :
public function saveLike($photoId){
DB::update('UPDATE `photo_links` SET likes = likes + 1 WHERE `id` = ?', array($photoId));
}
最佳答案
首先,_token
应始终在 http 请求中发送,以便您可以将其添加到数据中:
$('.takImg').click(function(){
var photoId = $(this).parent().attr('id');
var _token = $('meta[name="csrf_token"]').attr('content');
$.ajax({
type: "POST",
url: "/save_like",
data: {_token:_token, photoId:photoId},
success : function(msg) {
console.log(msg);
},
complete : function(r) {
console.log(r);
},
error: function(error) {
console.log(error);
}
});
});
内部服务器错误 500
意味着问题来自您的服务器,在您的情况下这意味着它来自 Controller 中的操作 saveLike
,所以我的猜测是这个问题来自表达式 WHERE
id= ?
:
DB::update('UPDATE `photo_links` SET likes = likes + 1 WHERE `id` = ?', array($photoId));
____________________________________________________________^^^^^^^^^^
您将数组传递给 =
这会导致问题,请尝试:
public function saveLike(){
$photoId = INPUT::get('photoId');
DB::update("UPDATE `photo_links` SET likes=likes+1 WHERE `id` = $photoId");
}
希望这有帮助。
关于php - Laravel 5.3 - jquery ajax(内部服务器错误 500),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41081255/