【问题标题】:Laravel Ajax POST Request does not work: 302 foundLaravel Ajax POST 请求不起作用:找到 302
【发布时间】:2017-07-14 14:09:49
【问题描述】:

我正在尝试通过 Laravel 中的 ajax 推送一些数据。不幸的是,它不起作用。当我查看网络流量时,我发现了这个:

Request Method:POST
Status Code:302 Found

我正在尝试从 JSGrid 获取数据,它工作正常。数据对象已填充。我检查了它。为了测试,我刚刚在我的控制器中返回了一条短消息。但是当我发送 POST 请求时它甚至没有被调用......

这是我的代码

Javascript:

$.ajaxSetup({
    headers: {'X-CSRF-Token': $('meta[name=token]').attr('content')}
});
$('#save_list').click(function (e) {
    e.preventDefault();
    var url = '{{ route("account.save_accounts_to_user") }}';
    var post = {};
    post.account_list = $("#jsGrid").jsGrid("option", "data");

    $.ajax({
        type: "POST",
        url: url,
        dataType: 'JSON',
        data: post,
        cache: false,
        success: function (data, textStatus, jqXHR) {
            console.log(textStatus + " - " + data);
            return data;
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(jqXHR.responseText + textStatus + " - " + errorThrown);
        }
    });
    return false;
});

路线:

Route::post('save_accounts_to_user', ['as' => 'account.save_accounts_to_user', 'uses' => 'AccountController@saveAccountsToUser']);  //ajax request   

控制器:

/**
 * Save all used accounts for a user.
 *
 * @param  \Illuminate\Http\Request $request
 * @return \Illuminate\Http\Response
 */
public function saveAccountsToUser(Request $request)
{
    $response = array();
    $response["status"] = "ok";
    $response["message"] = trans('account.accounts_saved');

    return \Response::json($response);
}

我期待我会从控制器方法中获取 JSON 文本作为响应消息。但相反,我在没有调用想要的方法的情况下被重定向。 我不知道那里会发生什么。没有为此路由分配中间件,这可能是此重定向的原因。

你有什么想法吗?

【问题讨论】:

    标签: javascript php jquery ajax laravel


    【解决方案1】:

    毕竟它是一个外部组的中间件,它正在重定向请求-.-

    【讨论】:

      【解决方案2】:

      可能是您使用的“X-CSRF-Token”而不是 Laravel 文档中提到的“X-CSRF-TOKEN”,这是这里的问题吗?尝试完全遵循 Laravel 文档。请参考以下链接。

      https://laravel.com/docs/5.3/csrf

       $.ajaxSetup({
        headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          }
       });
      

      【讨论】:

      • 我改了名字,但是请求还是被重定向了。但我找到了原因。 =)
      • 能否请您在这里提供原因兄弟
      【解决方案3】:

      添加此代码:

      $.ajaxSetup({
      headers: {'X-CSRF-Token': $('meta[name=token]').attr('content')}
      });
      

      之后:

      var url = '{{ route("account.save_accounts_to_user") }}';
      

      【讨论】:

      • 但是为什么这会回答这个问题呢?
      • @justCarty 只是因为我们总是将标题放在 ajax 开始,而在你的情况下,你把它放在 ajax 开始之前。
      【解决方案4】:

      在 AJAX 调用中使用标头

      例子:

      $.ajax({
         type: "POST",
         url: link, // your link
         data: DataObject, // data to pass
         headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
         },
         success: function (result) {
         }
      });
      

      【讨论】:

        猜你喜欢
        • 2021-11-12
        • 1970-01-01
        • 2016-11-05
        • 2015-09-08
        • 2021-07-09
        • 2015-04-23
        • 1970-01-01
        • 1970-01-01
        • 2018-02-15
        相关资源
        最近更新 更多