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

时间:2015-03-23 18:36:19

标签: php jquery ajax laravel laravel-5

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

我正在尝试向我的Laravel控制器执行一个简单的ajax请求并获取它发送的数据。我把它简化为最大值,我仍然得到数据“未定义”的ERROR 500。

似乎每个上线示例都是关于Laravel 4.0的,我不确定他们是否改变了某些东西,但似乎没有任何工作。我也尝试将路由更改为“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(data)给出以下内容:

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,它可以正常工作。 (设置路线到任何地方)

2 个答案:

答案 0 :(得分:3)

如果您在回复中查看浏览器控制台,则可能会遇到CSRF middleware。您需要使用用户_token的当前值发布csrf_token()

我们在页面布局中包含这个,以便通过标题(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

答案 1 :(得分:0)

$.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');

    }

});