如何向 Laravel 5.0 框架发送 Ajax 请求?

How to send an Ajax request to Laravel 5.0 framework?

我整个上午都在尝试解决这个问题,但我似乎无法在网上找到任何工作方法。

我正在尝试向我的 Laravel 控制器发出一个简单的 ajax 请求并获取它发送的数据。我已将它简化到最大程度,但我仍然得到数据 "undefined".

的错误 500

似乎每个在线示例都是关于 Laravel 4.0,我不确定他们是否更改了某些内容,但 none 似乎有效。我还尝试将路由更改为 "any",它适用于直接访问,但不适用于 ajax 请求。

谢谢。

控制器:

<?php namespace App\Http\Controllers;
use Session, DB, Request;
class AjaxController extends Controller {

    public function question()
    {
        print_r("Made It");
        die();
    }
}

路线:

Route::post('/ajax/question', 'AjaxController@question');

Javascript :

$.ajax({
    url: "/ajax/question",
    method: 'POST',
    data:  { 'answered': '1' },
    processData: false,
    contentType: false,
    cache: false,
    success: function(data) {
        console.log(data);
        console.log("success");
    },
    error: function(data) {  
        console.log(data);
        console.log("error");                 
    }
});

console.log(数据)给出以下内容:

readyState

    4
responseText

    ""
status

    500
statusText

    "Internal Server Error"
abort

    function(e)
always

    function()
complete

    function()
done

    function()
error

    function()
fail

    function()
getAllResponseHeaders

    function()
getResponseHeader

    function(e)
overrideMimeType

    function(e)
pipe

    function()
progress

    function()
promise

    function(e)
setRequestHeader

    function(e, t)
state

    function()
statusCode

    function(e)
success

    function()
then

    function()

编辑: 如果我将请求更改为 GET,它会正常工作。 (将路线设置为任意)

如果您在浏览器控制台中查看响应,您很可能会点击 CSRF middleware。您需要 post _token 与用户 csrf_token().

的当前值

我们将其包含在我们的页面布局中,以便通过 header(Laravel 理解)将其自动添加到所有 AJAX 请求:

<script>
$(function() {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': {!! json_encode(csrf_token()) !!};,
        }
    });
});
</script>

有关其工作原理的详细信息,请参阅 https://github.com/laravel/framework/blob/8687d42c6674e47efc093b5092ea217b62ba293a/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php#L55

$.ajax({

    type: "POST",

    URL: "test/",

    data: { 

        id: $(this).val(), // < note use of 'this' here

        access_token: $("#access_token").val() 
    },

    success: function(result) {

        alert('YES');
    },
    error: function(result) {

        alert('Some Thing went wrong');

    }

});