【问题标题】:Laravel 5.1 xmlHttpRequest AJAX POST TokenMismatchExceptionLaravel 5.1 xmlHttpRequest AJAX POST TokenMismatchException
【发布时间】:2015-10-25 04:07:26
【问题描述】:

相关代码如下:

var csrfToken = "{{ csrf_token() }}";
xmlhttp.open("POST", "/internal/v1/create/strategy", true);
xmlhttp.setRequestHeader('X-CSRF-TOKEN', csrfToken);
postString = "param1=" + varOne + "&param2=" + varTwo;
xmlhttp.send(postString);

我已经想了好几个小时了,老实说,我现在不知道该怎么做。请注意,如果我使用 form 方法,一切正常。我还尝试将 CSRF 令牌作为 postString 中的参数发送:“_token=" + csrfToken

【问题讨论】:

  • 你试过X-XSRF-TOKEN吗?
  • 您是否尝试调试发布请求以查看标头是否真正被传输?我也看不到你是如何实例化你的 xmlhttp 对象的。
  • xmlhttp 对象在代码的前面通常被实例化,但我能够修复代码。这里有两个问题,在 config/session.php 文件中,域设置为空,我在某处读到这需要设置,否则会导致错误,所以我这样做了,但另外我需要包含内容-type 为 url 编码形式。
  • 您是否使用PHP 在JavaScript 变量中回显令牌?使用<meta name="_token" value="{{ csrf_token() }}" /> 之类的东西,然后尝试在JavaScript 中访问它。
  • 我曾经是,现在仍然是。尽管基于我上面提到的修复,我已经让代码本身可以工作。

标签: php ajax laravel laravel-5 laravel-5.1


【解决方案1】:

问题已通过两部分解决方案解决:

需要为 Laravel 添加 'Content-type' 标头才能读取 POST 的参数:

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

此外,在 config/session.php 文件中,还需要将“domain”变量指向应用程序的实际域,而不是默认值 null。这可能是在初始设置期间完成的,但我一定忘记了这样做。

完成这两项更改后,POST 请求将通过 AJAX 调用成功通过。

【讨论】:

    【解决方案2】:

    如果您仍然对上述答案感到困惑,您可以在下面尝试。

    var token = $("#token").val();
    const xhr = new XMLHttpRequest();
    xhr.open("POST", "upload/media/files?_token="+token);
    

    虽然 $("#token).val() 已经在隐藏输入中,但请参见下面的示例。

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

    【讨论】:

      【解决方案3】:

      这是对我有用的解决方案。

      var xhr = new XMLHttpRequest();
      xhr.open('POST', group_email_url, true);
      xhr.setRequestHeader('X-CSRF-TOKEN', $('meta[name="csrf-token"]').attr('content'));
      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
          var data = JSON.parse(xhr.responseText);
            if (data['status']==true) {
               window.location = group_list_url;
            } else {
               alert('Whoops Something went wrong!!');
              }
            }
           }
      xhr.send('group_id=' + group_id + '&ids=' + strIds);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-14
        • 2016-03-10
        • 1970-01-01
        • 2017-01-20
        • 2011-05-15
        • 2017-01-15
        • 2016-05-08
        • 2019-03-14
        相关资源
        最近更新 更多