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,所以我猜这个问题来自表达式 WHEREid= ? :

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

希望对您有所帮助。