Ajax 如何在Laravel 5.4中发布数据控制器?

Ajax 如何在Laravel 5.4中发布数据控制器?,ajax,laravel,controller,laravel-5.4,Ajax,Laravel,Controller,Laravel 5.4,我无法将数据发布到控制器,我的ajax调用是否有问题?我的web.php设置,或者控制器没有设置,我得到的错误是。提醒:这是本地运行的laravel 5.4 POST 500(内部服务器错误) JS web.php Route::post('change-rank', 'RankController@changeRank'); RankController.php namespace App\Http\Controllers; use App\Rank; use Illuminate\Htt

我无法将数据发布到控制器,我的ajax调用是否有问题?我的web.php设置,或者控制器没有设置,我得到的错误是。提醒:这是本地运行的laravel 5.4

POST 500(内部服务器错误)

JS

web.php

Route::post('change-rank', 'RankController@changeRank');
RankController.php

namespace App\Http\Controllers;

use App\Rank;
use Illuminate\Http\Request;

class RankController extends Controller
{
    public function changeRank()
    {
        info("hi");
    }
}

更改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);
                }
            });
});

更改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();
}

它对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();
}

您显示的JS代码不包含CSRF令牌,这肯定会引发500服务器错误。在AJAX调用中包含CSRF令牌有不同的方法,下面是一个示例

以您的形式:

<form>
    {{ csrf_token() }}
    ....
var token = $('input[name="_token"]');
....
$.ajax({
    data: {_token: token, id: id, memberId: memberId},
    ...
有,还有拉威尔医生

顺便说一句,
500服务器错误
只是一个一般性错误,告诉您,有一个服务器错误。如果要解决这个问题,您确实需要知道错误是什么——您应该能够在laravel和webserver(Apache/nginx/etc)日志中看到这一点。您的日志可能会显示类似“CSRF令牌失配异常”的内容,这可能会直接引导您找到答案!:-)

编辑

我刚刚注意到您的Javascript中有一个输入错误,我最初将其复制到了我的答案中。这可能只是一个输入错误,而不是在您的真实代码中,因为它可能会抛出JS错误,而不是运行并生成服务器错误

data: {_token: token, id: id, memberId, memberId},
应该是:

data: {_token: token, id: id, memberId: memberId},

(memberId后面的冒号)。

您显示的JS代码不包括CSRF令牌,这肯定会引发500服务器错误。在AJAX调用中包含CSRF令牌有不同的方法,下面是一个示例

以您的形式:

<form>
    {{ csrf_token() }}
    ....
var token = $('input[name="_token"]');
....
$.ajax({
    data: {_token: token, id: id, memberId: memberId},
    ...
有,还有拉威尔医生

顺便说一句,
500服务器错误
只是一个一般性错误,告诉您,有一个服务器错误。如果要解决这个问题,您确实需要知道错误是什么——您应该能够在laravel和webserver(Apache/nginx/etc)日志中看到这一点。您的日志可能会显示类似“CSRF令牌失配异常”的内容,这可能会直接引导您找到答案!:-)

编辑

我刚刚注意到您的Javascript中有一个输入错误,我最初将其复制到了我的答案中。这可能只是一个输入错误,而不是在您的真实代码中,因为它可能会抛出JS错误,而不是运行并生成服务器错误

data: {_token: token, id: id, memberId, memberId},
应该是:

data: {_token: token, id: id, memberId: memberId},

(在
memberId
后加冒号)。

什么是
info()
函数?在Laravel中,它充当日志,因此如果它是成功的,我会在日志文件中看到一个“hi”。我不知道
Laravel
具有该函数。当您发出请求时,您在网络选项卡中得到的响应是什么?如果失败,您的
laravel.log
中会出现什么错误(我建议先清除日志)。什么是
info()
函数?在laravel中,它充当日志,因此如果成功,我会在日志文件中看到“hi”。酷,我不知道
laravel
具有该功能。当您发出请求时,您在网络选项卡中得到的响应是什么?如果失败,您的
laravel.log
(我建议先清除日志)。@jeremy:找到这个问题了吗?嘿,不,这更像是一个路由问题,而不是添加分号:/是什么?@jeremy:找到这个问题了吗?嘿,不,这更像是一个路由问题,而不是添加分号:/是什么?