Ajax работает только в первый раз, когда он загружается во второй раз, он получил ошибку токена CSRF. Как решить эту проблему? - PullRequest
0 голосов
/ 30 апреля 2019

В моем коде Ajax работает отлично в первый раз, но он не работает, когда страница загружается ajax во второй раз. Я получаю ошибку CSRF 403. Во второй раз.

Вот мой контроллер:

$csrf_name = $this->security->get_csrf_token_name();
$csrf_hash = $this->security->get_csrf_hash();
$output = array("draw" => $draw,"recordsTotal" => $total_records,"recordsFiltered" => $total_records,"data" => $data, $csrf_name => $csrf_hash); 
echo json_encode($output);
exit();

Вот sS JS:

$(document).ready(function() {
            var csrf = jQuery('#csrf_hash').val();
            $.fn.dataTable.moment('DD/MM/YYYY');  
            $('#messages').DataTable({
                responsive: true,
                iDisplayLength: 50,
                "processing": true,
                "serverSide": true,
                "ajax": {
                    url : "<?php echo site_url("iot_lora/iot_lora_datatable_ajax") ?>",
                    type : 'POST',
                    "data": function(d) {
                        var frm_data = $('form').serializeArray();
                        $.each(frm_data, function(key, val) {
                        d[val.name] = val.value;
                       }); 
                     }
                },
                "fnDrawCallback" :  function(response) {
                        var new_csrf = '<?php echo $this->security->get_csrf_hash(); ?>';
                        //alert(new_csrf);
                        //$("#csrf_hash").val("");
                },
            });   
        });

И мои настройки AJAX:

$(function($) {
        $.ajaxSetup({
            data: {
                '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
            }
        });

    });

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019
<meta name="csrf-token" content="{{ csrf_token() }}">
 AND WRITE JQUERY CODE OUTSIDE DOCUMENT.READY FUNCTION
 var csrf = jQuery('#csrf_hash').val();
        $.fn.dataTable.moment('DD/MM/YYYY');  
        $('#messages').DataTable({
            responsive: true,
            iDisplayLength: 50,
            "processing": true,
            "serverSide": true,
            "ajax": {
                url : "<?php echo site_url("iot_lora/iot_lora_datatable_ajax") ?>",
                type : 'POST',
                "data": function(d) {
                    var frm_data = $('form').serializeArray();
                    $.each(frm_data, function(key, val) {
                    d[val.name] = val.value;
                   }); 
                 }
            },
            "fnDrawCallback" :  function(response) {
                    var new_csrf = '<?php echo $this->security->get_csrf_hash(); ?>';
                    //alert(new_csrf);
                    //$("#csrf_hash").val("");
            },
        });
0 голосов
/ 30 апреля 2019

Надеюсь, это поможет вам.

Добавьте приведенный ниже код в файл header.php.

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

Чем добавить X-CSRF-TOKEN в заголовок ajax.

$.ajax({
    url         : "URL",
    type        : "POST/GET",
    dataType    : "JSON",
    data        : $("#FORMDATA").serialize(),
    headers     : {"X-CSRF-TOKEN" : $('meta[name="csrf-token"]').attr('content')},
    success     : function (res){
    },
    error       : function (err){
    }
});
...