【问题标题】:How to send an Ajax request to Laravel 5.0 framework?如何向 Laravel 5.0 框架发送 Ajax 请求?
【发布时间】:2015-05-26 21:23:53
【问题描述】:

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

我正在尝试向我的 Laravel 控制器发出一个简单的 ajax 请求并获取它发送的数据。我已将其简化到最大程度,但仍会收到带有“未定义”数据的 ERROR 500。

似乎网上的每个例子都是关于 Laravel 4.0 的,我不确定他们是否改变了一些东西,但似乎没有一个有效。我还尝试将路由更改为“任何”,它适用于直接访问,但不适用于 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 它可以正常工作。 (将路线设置为任意)

【问题讨论】:

  • 尝试从您的 $.ajax 请求中删除 processDatacontentType
  • @Musa 刚试过,没有运气。
  • 您运行的是什么版本的 jQuery?因为在 1.9 之前,您的 method 参数实际上应该被称为 type api.jquery.com/jquery.ajax

标签: php jquery ajax laravel laravel-5


【解决方案1】:

如果您在浏览器控制台中查看响应,您可能会点击CSRF middleware。您需要使用用户csrf_token() 的当前值发布_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

【讨论】:

  • 我会接受你的回答,因为它确实指出了我的错误在哪里。但是,我必须将 csrf 存储到 JS 变量中,并以 ajax 形式在“_token”下发送。非常感谢您的帮助!
【解决方案2】:
$.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');

    }

});

【讨论】:

  • 为您的答案提供一些上下文而不是仅仅发布代码 sn-p 会更好。
猜你喜欢
  • 2015-03-30
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 1970-01-01
  • 2017-06-14
  • 2016-03-20
  • 2013-10-05
相关资源
最近更新 更多