Laravel 5.5:419 AJAX的未知状态

时间:2018-02-08 08:15:35

标签: php ajax forms laravel csrf

我要求POST

路线:

Route::post('/register','CommonController@postRegister')->name('register');

CSRF元标记:

<meta name="csrf-token" content="{{ csrf_token() }}">

$("#submitSalonForm").click(function(e) {
  $.ajaxSetup({
      headers: {
          'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }
  });
  $.ajax({
      url: "/register",
      type: "post",
      data: new FormData($('form')[1]),
      cache: false,
      contentType: false,
      processData: false,
      success:function(response) {
          return alert('Form 2 submitted');
      }
  });
});

例外:

Exception screenshot

有时出现异常,有时代码运行顺利,我不知道我在这里缺少什么。

4 个答案:

答案 0 :(得分:2)

将ajax方法从post改为

<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">

Ajx电话:

let formData = $('form').serializeArray();
$.ajax({
      url: "/register",
      type: "POST",
      data: {formData, "_token": $('#token').val()},
      cache: false,
      datatype: 'JSON',
      processData: false,
      success: function (response) {
           console.log(response);
         },
         error: function (response) {
           console.log(response);
         }
  });

您的路线是

Route::get('/register','CommonController@showRegister')->name('register');

Ajax调用正在发出一个post请求,laravel sqwaks带有一个http异常。

修改 Laravel 419发布错误通常与api.php和令牌授权有关

因此,尝试将令牌包含在ajax主体上,而不是像上面那样。

答案 1 :(得分:1)


除了将crsf-token值放在标头元标记中之外,您还需要在以下AJAX请求中传递该值:

dfs = [df1, df2, df3]
all_cols = set(sum([i.columns for i in dfs], []))

def add_missing_col_r(dfs):
    return_dfs = []
    for df in dfs:
        missing_cols = all_cols - set(df.columns)
        for i in sorted(missing_cols):
            df = df.withColumn(i, lit(None).cast(StringType()))
        return_dfs.append(df)
    return return_dfs

new_dfs = add_missing_col_r(dfs)

[x.show() for x in new_dfs]
+---+----+-----+----+----+----+
|  a|   b|    c|   d|   e|   f|
+---+----+-----+----+----+----+
|  1|foo1| qux1|null|null|null|
|  2|bar1|quux1|null|null|null|
|  3|baz1|quuz1|null|null|null|
+---+----+-----+----+----+----+

+---+----+----+----+----+----+
|  a|   c|   b|   d|   e|   f|
+---+----+----+----+----+----+
|  4|foo2|null|null|null|null|
|  5|baz2|null|null|null|null|
+---+----+----+----+----+----+

+-------+-------+------+------+----+----+
|      b|      d|     e|     f|   a|   c|
+-------+-------+------+------+----+----+
|   bar3|   bar3|  bar3|  bar3|null|null|
|   qux3|  quux3| quuz3|corge3|null|null|
|grault3|garply3|waldo3| fred3|null|null|
+-------+-------+------+------+----+----+

答案 2 :(得分:0)

无需单独设置ajax。 Laravel自动生成CSRF&#34;令牌&#34;对于应用程序管理的每个活动用户会话。获取令牌:

var token = "{{ csrf_token() }}";

data

中传递令牌
var token = "{{ csrf_token() }}";
var formData = new FormData($('form')[1])
$.ajax({
    url : '/register',
    data : {_token:token,formData:formData},
    type: 'post',
    ...
})

答案 3 :(得分:0)

好吧,我知道我来不及了,但是我确实遇到了您面临的确切问题。

我100%确定令牌已经随请求发送,但问题仍然存在。

因此,经过太多搜索,我终于可以按照以下步骤进行修复:

create-react-app