我无法将数据发布到我的控制器,我的 ajax 调用有问题吗? 我的网络设置.php,还是控制器未设置,我得到的错误是。 提醒这是LaRavel在本地运行的5.4
开机自检 http://127.0.0.1:8000/change-rank 500(内部服务器错误(
.JS
$('.rank-select').change(function(){
var id = $(this).val();
var memberId = $(this).closest('.irmember').attr('id');
console.log(id);
console.log(memberId);
$.ajax({
type: "POST",
url: 'change-rank',
data: {id: id, memberId, memberId},
success: function( msg ) {
console.log(msg);
}
});
})
网络.php
Route::post('change-rank', 'RankController@changeRank');
排名控制器.php
namespace AppHttpControllers;
use AppRank;
use IlluminateHttpRequest;
class RankController extends Controller
{
public function changeRank()
{
info("hi");
}
}
您显示的 JS 代码不包含 CSRF 令牌,这肯定会引发 500 服务器错误。 有不同的方法可以在 AJAX 调用中包含您的 CSRF 令牌,下面是一个例子。
在您的表格中:
<form>
{{ csrf_token() }}
....
在您的 JS 中:
var token = $('input[name="_token"]');
....
$.ajax({
data: {_token: token, id: id, memberId: memberId},
...
关于SO还有其他方法,Laravel文档提出了另一种方法。
顺便说一句,500 server error
只是一个通用错误,告诉您,好吧,存在服务器错误。 如果你想解决它,你真的需要知道错误是什么 - 你应该能够在laravel和Web服务器(Apache/nginx/etc(日志中看到它。 您的日志可能会说"CSRF TokenMismatchException"之类的内容,这可能会直接引导您找到答案!:-)
编辑
我刚刚注意到你的Javascript中的一个错字,我最初把它复制到我的答案中。 它可能只是一个错字,而不是在你的真实代码中,因为它可能会抛出JS错误而不是运行并生成服务器错误。
data: {_token: token, id: id, memberId, memberId},
应该是:
data: {_token: token, id: id, memberId: memberId},
(memberId
后的冒号(。
像这样更改您的 JS 代码:
$('.rank-select').change(function(){
var id = $(this).val();
var memberId = $(this).closest('.irmember').attr('id');
console.log(id);
console.log(memberId);
$.ajax({
type: "POST",
url: 'change-rank',
data: {id:id, memberId:memberId},
success: function( msg ) {
console.log(msg);
}
});
});
它对 ajax 参数的简单更改应该可以正常工作。
$('.rank-select').change(function(){
var id = $(this).val();
var memberId = $(this).closest('.irmember').attr('id');
console.log(id);
console.log(memberId);
$.ajax({
type: "POST",
url: 'change-rank',
data: {id:id, memberId:memberId},
success: function( data) {
console.log(data);
}
});
});
控制器文件是,
public function changeRank(Request $request)
{
return $request->all();
}