【问题标题】:How to post data controller in Laravel 5.4?如何在 Laravel 5.4 中发布数据控制器?
【发布时间】:2018-01-20 18:22:03
【问题描述】:

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

POST 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);
                }
            });
})

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");
    }
}

【问题讨论】:

  • info() 函数是什么?
  • 在 Laravel 中它充当日志,所以如果成功,我会在我的日志文件中看到一个“hi”
  • 酷,不知道Laravel 有这个功能。当您提出请求时,您在网络选项卡中得到的响应是什么?不知道你在laravel.log 中遇到了什么错误(我建议先清除日志)。

标签: ajax laravel controller laravel-5.4


【解决方案1】:

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

在您的表单中:

<form>
    {{ csrf_token() }}
    ....

在你的 JS 中:

var token = $('input[name="_token"]');
....
$.ajax({
    data: {_token: token, id: id, memberId: memberId},
    ...

other approaches here on SO 和 Laravel 文档 suggest another method

顺便说一句,500 server error 只是一个通用错误,告诉您,嗯,有一个服务器错误。如果你想解决它,你真的需要知道错误是什么 - 你应该能够在 laravel 和 webserver (Apache/nginx/etc) 日志中看到它。您的日志可能会说“CSRF TokenMismatchException”之类的内容,这可能会让您直接找到答案! :-)

编辑

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

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

应该是:

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

memberId 后面的冒号)。

【讨论】:

    【解决方案2】:

    改变你的 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);
                    }
                });
    });
    

    【讨论】:

    • @jeremy: 找到运气了吗?
    • 嘿,不,这比添加分号更像是一个路由问题:/
    • 那是什么?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2017-08-09
      • 1970-01-01
      • 2019-08-06
      相关资源
      最近更新 更多