在laravel中使用Ajax并给我未知的状态。为什么?

时间:2019-06-04 09:02:36

标签: ajax laravel

在我的应用程序中,我正在使用Ajax请求,但它给了我jquery-3.3.1.js:9600 POST http://localhost:8000/get_types_ajax

  

gettin 419(未知状态)

我的JavaScript是:

 $(document).ready(function() {

    var ckbox = $("input[name='particulars']");
    var chkId = '';
    $("input[name='particulars']").on('change', function() {

      if (ckbox.is(':checked')) {
          values = [];
          names = [];
          $("input[name='particulars']:checked").each ( function() {
              amount = $(this).val().split(",");
              console.log("amount",amount);
              values.push(amount[0]);
              names.push(amount[1]);
          });//checked
         total_value = 0;

         values.forEach(function(value) {
            value = Number(value);
            total_value = total_value + value;
            document.getElementById('total').innerHTML = total_value;
        });//foreach
     }//if     
    else {
        total_value = 0;
        document.getElementById('total').innerHTML = total_value;
    }

    $.ajax({    url:"{{url('/get_types_ajax')}}",
                type: 'POST',
                data: {message:names},
                success: function (data) 
                { 
                  console.log(data);
                } 
                }); 
        });//onchange
 });//ready

我的web.php是:

 Route::post('/get_types_ajax', 'DevkrutyaController@get_types');

3 个答案:

答案 0 :(得分:1)

您遇到的419错误是由于ajax请求中缺少CSRF令牌引起的。要传递csrf令牌,可以使用jquery的ajax设置方法

 $.ajaxSetup({
        headers: {
        'X-CSRF-TOKEN': '{{ csrf_token() }}'
        }
    });
$.ajax({
            url:"{{url('/get_types_ajax')}}",
            type: 'POST',
            data: {message:names},
            success: function (data) 
            { 
              console.log(data);
            } 
            }); 
    });//onchange

});//ready

有关更多信息,https://laravel.com/docs/master/csrf#csrf-x-csrf-token

答案 1 :(得分:1)

我知道。您没有通过发帖请求传递CSRF_TOKEN 如果您使用的是post方法,那么您必须以其他方式传递CSRF_TOKEN,您可以忽略(跳过)VerifyCSRF令牌中间件中的某些网址

 protected $except = [
        'stripe/*',
 ];
  

否则,请在您的js文件中添加此行,它将自动发送   csrf令牌

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

有关更多详细信息,请阅读此article

答案 2 :(得分:1)

Laravel使用CSRF令牌来保护您的应用程序免受跨站点请求伪造(CSRF)攻击。您将需要在ajax中传递CSRF令牌。

标题中

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

脚本中

<script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
</script>