Laravel 5 App - AJAX Post请求不接受令牌并抛出500内部服务器错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5 App - AJAX Post请求不接受令牌并抛出500内部服务器错误相关的知识,希望对你有一定的参考价值。

所以,我一直在这里寻找3小时的好时间,为什么我的代码不起作用。即使我尝试过多种方法来实现它,我也不认为我的ajax请求正在检测我的CSRF令牌。 AJAX请求新手,所以很容易。

目标:向/ email / subscribe /提交ajax POST请求,并将用户提供的电子邮件地址添加到email_subscribers表中。

我已经尝试将以下内容添加到我的代码中以显示令牌:

元标记和Ajax设置。

文件顶部

<meta name="csrf-token" content="{{ csrf_token() }}">

在脚本标签INSIDE中jquery $(document).ready()函数

// CSRF Ajax Token
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

隐藏的输入字段

我还添加了一个隐藏的输入字段,并尝试将标记插入ajax帖子内的数据对象中。

html

<input type="hidden" id="token" value="{{ csrf_token() }}">

javascript标记

var token = $('#token').val();
// var token = $('meta[name="csrf-token"]').attr('content'); //Tried this way

$.ajax({
    type: 'POST',
    url: '/email/subscribe/',
    dataType: 'json',
    data: {
        email: email,
        '_token': token,
        // "_token": "{{ csrf_token() }}", //Tried this way as well
        "_method": 'POST',
    },
    success: function (data) {
        // Check Server Side validation
        if($.isEmptyObject(data.errors)){
            console.log(data['success']);
        }else{
            // Validation Failed Display Error Message
            console.log(data.errors);
        }

    },
    error: function (data) {
        console.log(data);
    }
}); // End Ajax POST function

这是我的web.php文件

// Email Routes
Route::prefix('email')->group(function() {

    // Create Post Route for subscribing
    Route::post('/subscribe', 'EmailSubscriptionsController@subscribe')->name('email.subscribe');

});

和我的EmailSubscriptionsController

class EmailSubscriptionsController extends Controller
{
    // Store the Email into the database
    public function subscribe(Request $request) {

        // Validate the request
        $validator = Validator::make($request->all(), [
            'email' => 'required|email',
        ]);

        // If the validation fails
        if($validator->fails()) {
            return response()->json([
                'errors' => $validator->errors()->all(),
            ]);
        }

        // New Section Object
        $subscription = new EmailSubscription;

        // Add Name into Section Object
        $subscription->email = $request->email;

        // Save the Section
        $subscription->save();

        // Return The Request
        return response()->json([
            'success' => 'Record has been saved successfully!'
        ]);
    } // End Subscribe

} // End Controller

真的很奇怪的事实是,当我用NOTHING提交请求时,我的subscribe()函数中的以下内容:

// Return The Request
    return response()->json([
        'success' => 'Record has been saved successfully!'
    ]);

它不会返回错误....只需将成功消息传递给控制台即可。我不确定我做错了什么,因为我在我的网站的另一部分工作(ajax post请求)。

答案

首先查看storage/logs/laravel.log以获取异常堆栈跟踪。这应该更清楚地表明失败的原因。

Web检查器还允许您查看通常包含跟踪的响应。

500 ISE的一个常见原因是通过use不正确地导入类。

另一答案

使用它像这样: -

headers: {
        'X-CSRF-TOKEN': '{{ csrf_token() }}'
}

以上是关于Laravel 5 App - AJAX Post请求不接受令牌并抛出500内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 AJAX - 即使我发送 POST 请求,也不允许返回 405 GET 方法

Laravel 5.7 中 ajax POST 的最小工作示例

Laravel 5 在控制器中获取 AJAX 数组 POST

如何通过 post 方法将数据从 ajax 传递到 laravel 5.2 控制器

Laravel 5:Ajax Post 500(内部服务器错误)错误

当通过Ajax进行POST时,Laravel 5.6 CSRF令牌失败