Laravel 5.3 - jquery ajax(内部服务器错误 500)
Laravel 5.3 - jquery ajax (internal server error 500)
我正在尝试在 laravel5 中使用 jquery ajax。实际上一直发生的是控制台日志给我一个 internal server error 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');`
控制器:
public function saveLike($photoId){
DB::update('UPDATE `photo_links` SET likes = likes + 1 WHERE `id` = ?', array($photoId));
}
我认为问题出在这里:
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
没有token怎么办? beforeSend
不会 return 什么。更改为:
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
return xhr;
},
这就是我在我的应用程序中使用的:
$("#captcha-gen-button").click(function(e){
e.preventDefault();
$.ajax({
url: "/captcha-ajax",
method: "POST",
headers: { 'X-CSRF-Token' : '{!! csrf_token() !!}' }
}).done(function(image) {
$("#captcha-img-container").html(image);
});
});
首先,_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);
}
});
});
internal server error 500
表示问题来自您的服务器,在您的情况下,这意味着它来自控制器中的操作 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");
}
希望对您有所帮助。
我正在尝试在 laravel5 中使用 jquery ajax。实际上一直发生的是控制台日志给我一个 internal server error 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');`
控制器:
public function saveLike($photoId){
DB::update('UPDATE `photo_links` SET likes = likes + 1 WHERE `id` = ?', array($photoId));
}
我认为问题出在这里:
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
没有token怎么办? beforeSend
不会 return 什么。更改为:
beforeSend: function (xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
return xhr;
},
这就是我在我的应用程序中使用的:
$("#captcha-gen-button").click(function(e){
e.preventDefault();
$.ajax({
url: "/captcha-ajax",
method: "POST",
headers: { 'X-CSRF-Token' : '{!! csrf_token() !!}' }
}).done(function(image) {
$("#captcha-img-container").html(image);
});
});
首先,_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);
}
});
});
internal server error 500
表示问题来自您的服务器,在您的情况下,这意味着它来自控制器中的操作 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");
}
希望对您有所帮助。