Laravel 5.3 - jquery ajax(内部服务器错误500)

时间:2016-12-10 23:04:58

标签: php jquery ajax laravel laravel-5.3

我正在尝试在laravel5中使用jquery ajax。实际上发生的事情是consolelog给了我一个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));
}

3 个答案:

答案 0 :(得分:2)

首先应始终在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意味着问题来自您的服务器在您的情况下意味着它来自您控制器中的操作WHERE,所以我的猜测是这个问题来自表达式{{1} } id = ?

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

希望这有帮助。

答案 1 :(得分:0)

我认为问题在于:

beforeSend: function (xhr) {
        var token = $('meta[name="csrf_token"]').attr('content');
        if (token) {
            return xhr.setRequestHeader('X-CSRF-TOKEN', token);
        }
    },

没有令牌时发生了什么? beforeSend不会返回任何内容。改为:

beforeSend: function (xhr) {
        var token = $('meta[name="csrf_token"]').attr('content');
        if (token) {
            return xhr.setRequestHeader('X-CSRF-TOKEN', token);
        }
        return xhr;
    },

答案 2 :(得分:0)

这就是我在我的应用中使用的内容:

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