繁体   English   中英

AJAX响应后提交表单时的VerifyCsrfToken异常

[英]VerifyCsrfToken Exception on form submit after AJAX response

我有AJAX操作,该操作呈现了一个包含几个输入字段和Submit按钮的表单。

这是AJAX调用:

<script type="text/javascript">

$('#call_filter').click(function() {
   $.ajax({
    url : 'brandSpendingsFilter',
    type: 'POST',

    data: {company: $('#company').val(), country: $('#country').val(), dateFrom: $('#dateFrom').val(), dateUntil: $('#dateUntil').val(), media: $('#media').val(),
    products: $('[id^=products_]').serialize()},

    beforeSend: function() {$('#search_result').empty(); $("#loading-image2").show(); },
    error: function( jqXhr, textStatus, errorThrown ){
        console.log( errorThrown );
    },
    success : function(data) {
        $("#loading-image2").hide();
       $('#search_result').append(data);
    }
  });
});

</script>

和我的形式:

{!! Form::open(['url' => 'brandSpendingsCSV', 'method' => 'POST', 'id' => 'csv']) !!}
{{ csrf_field() }}
<input type="hidden" name="campaignID" value="@foreach($campaignID as $c){{$c}},@endforeach">
<input type="hidden" name="dateFrom" value="{{$dateFrom}}">
<input type="hidden" name="dateUntil" value="{{$dateUntil}}">
<input type="hidden" name="media" value="{{$media}}">
<input type="hidden" name="country" value="{{$country}}">

</tr>
</table>
@if(Auth::user()->isAdmin())

<div class="row" style="float: right;"><button type="submit" onclick="submitForm()" class="btn btn-warning">CSV EXPORT</button></div>
@endif

<br>
<br>

{!! Form::close() !!}

这个onclick函数是简单的提交代码:

<script type="text/javascript">
    function submitForm(){
    $('#csv')[0].submit();
}
</script>

从表单代码可以看到,我已经包含了csrf字段。 但是仍然在此之后,我仍然收到错误VerifyCsrfException 我尝试过的另一件事是包括AJAX标头:

<script type="text/javascript">

$(document).ready(function () {

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

});
</script>

但是错误仍然存​​在。 有什么建议么?

编辑

我将路线类型更改为GET并添加了此

<a href="brandSpendingsCSV?campaignID=@foreach($campaignID as $c){{$c}},@endforeach&dateFrom={{$dateFrom}}&dateUntil={{$dateUntil}}&media={{$media}}&country={{$country}}"><button class="btn btn-warning">CSV EXPORT</button></a>

目前可以使用,但由于这是临时解决方案,因此我将继续公开这个问题。 我需要POST方法。

将令牌添加到其余数据中:

data: {
        "_token": "{{ csrf_token() }}"
      }

干杯!

使用jQuery serialize()方法,与所有其他发布的令牌一起形成数据。

data: $(this).serialize(),

您正在使用{{ csrf_field() }}在页面中创建令牌,因此可以用作

 headers: {
   'X-CSRF-TOKEN': $('input[name="_token"]').val()
 }

或添加名为_token的元素以发布数据

var _token = $('input[name="_token"]').val();
data: {_token:_token,company: $('#company').val(),

也算值campaignID文字框或在页面的顶部

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM