Laravel-datatables: 401 غير مصرح به

تم إنشاؤها على ٣ سبتمبر ٢٠١٥  ·  15تعليقات  ·  مصدر: yajra/laravel-datatables

لقد قمت بالتحديث اليوم إلى الإصدار 5.11.7 وأواجه بعض الأخطاء العشوائية غير المصرح بها من ajax عندما أدخل إلى الصفحة التي يوجد بها مكون Datatables.
الكود الخاص بي مثل هذا

    public function anyData()
    {
      $Patient = Patient::select('*')->withTrashed();
      return \Datatables::of($Patient)->make(true);
    }

وإعلان جدول البيانات هو

$(document).ready(function() {
    $('#dataTables-patients').DataTable({
      responsive: true,
      processing: true,
      serverSide: true,
      ajax: base_url+'/patient/data',
      language:{
        url:base_url+'/js/dataTables.Spanish.json'
      },
      columns:[
        {data:'dni', name:'dni'},
        {data:'first_name', name:'first_name'},
        {data:'last_name', name:'last_name'},
        {data:'birthday', name:'birthday'},
        {data:'id', name:'id'},
        {data:'active', name:'active'},
      ],
      "columnDefs": [{
        "targets": 4,
        "data": "id",
        "render": function ( data, type, row ) {
          if(row.active=="0"){
            return '<a class="btn btn-primary" href="'+base_url+'/patient/show/'+data+'">'+patient.view+'</a>'+
                   '<a class="btn btn-success respatient" data-id="'+data+'" href="#" >'+patient.restore+'</a>';
          }else{
            return '<a class="btn btn-primary" href="'+base_url+'/patient/show/'+data+'">'+patient.view+'</a>'+
                   '<a class="btn btn-danger delpatient" data-id="'+data+'" href="#" >'+patient.delete+'</a>';
          }
        }

      },
      { "orderable": false, "targets": [ 4 ] },
      { "bSearchable": false, "aTargets": [ 5 ] },
      { "visible": false,  "targets": [ 5 ] }
      ]
    });

});

عندما ينفجر غير مصرح به ، لا بد لي من إعادة تسجيل الدخول في التطبيق. ويحدث ذلك بشكل عشوائي: يمكنني إعادة تحميل الصفحة 6 مرات ولا يحدث شيئًا ، وأحيانًا أدخل مرتين ويحدث غير مصرح به.

التعليق الأكثر فائدة

قراءة التعليقات ،
لقد حللت المشكلة جيدا
في الرأي
var token = '{{ csrf_token() }}';

ajax: { url:'$url', type:'post', data: { '_token': token } },

"var table = $ ('# myTable') ؛

        oTable = table.dataTable({
            processing: true,
            serverSide: true,
            order: [[1, 'desc']],
            buttons: [
                { extend: 'print',  className: 'btn dark btn-outline'       },
                { extend: 'copy',   className: 'btn red btn-outline'        },
                { extend: 'pdf',    className: 'btn green btn-outline'      },
                { extend: 'excel',  className: 'btn yellow btn-outline'     },
                { extend: 'csv',    className: 'btn purple btn-outline'     },
                { extend: 'colvis', className: 'btn dark btn-outline', text: 'Columns'}
            ],
            ajax: {
                url:'$url',
                type:'post',
                data: {
                    '_token': token
                }
            },
            $col,
            \"oLanguage\": {
                \"sEmptyTable\":   \"No se encontraron resultados\",
                \"sInfo\":         \"Mostrando _START_ a _END_ de _TOTAL_ filas\",
                \"sInfoEmpty\":    \"No se encontraron resultados\",
                \"sInfoFiltered\": \"(Filtrado de _MAX_ total de filas)\",
                \"sLengthMenu\":   \"Ver _MENU_ filas\",
                \"sSearch\":       \"Buscar:\",
                \"sZeroRecords\":  \"No se encontraron resultados\"
            },
            \"aoColumnDefs\": [
                { \"bSortable\": false, \"aTargets\": [ 0,-1 ] }

و
{\ "iDataSort \": 1، \ "aTargets \": [0]}،

                { \"sWidth\": \"20px\",   \"aTargets\": [ 0,-1 ]  },


            ]
        });


        table.on(\"keyup\", \"input[type=search]\", function () {
            /* Filter on the column (the index) of this element */
            oTable.fnFilter(this.value, $(\"thead input\").index(this));
        });

        $('#sample_1_tools > li > a.tool-action').on('click', function() {
            var action = $(this).attr('data-action');
            //console.log(action);
            oTable.DataTable().button(action).trigger();
        });

"

ال 15 كومينتر

@ mantrax314 ، هذا خطأ شبح واحد من الصعب حقًا تصحيحه. أبلغ العديد من المستخدمين بالفعل عن نفس المشكلة ولا يمكنهم العثور على أي شيء يسبب ذلك. لا يمكنني حتى إعادة إنتاج نفس الخطأ على جهازي المحلي. سيكون من الرائع والتقدير إذا كان بإمكانك المساعدة وتقديم العلاقات العامة إذا كان ذلك ممكنًا لإصلاح هذه المشكلة مرة واحدة وإلى الأبد. شكرا!

مرحبا،
لقد واجهت هذه المشكلة وحاولت تصحيح الأخطاء لساعات ولكن دون جدوى.
يبدو أن أحد الحلول هو تعيين ajax كطلب POST بدلاً من GET
لقد نجح هذا الأمر بالنسبة لي واختبرت من خلال تحديث صفحتي 50 مرة دون أن يتم طردي إلى صفحة تسجيل الدخول

يعتمد الحل على هذه المشكلة
https://github.com/yajra/laravel-datatables/issues/19

نفس الشيء مع Xyten لقد قمت بحل هذا باستخدام طلب POST لكنني حصلت على خطأ في رمز CSRF عند استخدام POST .. أي اقتراح لذلك؟ شكرا بالمناسبة.

mrofi ، اتبع المستندات لمعرفة مشكلة الرمز المميز. http://laravel.com/docs/5.1/routing#csrf -x-csrf-token

لقد قرأت للتو مشكلة https://github.com/Chumper/Datatable/issues/170 على Chumper Datatable وقد تكون قابلة للتطبيق علينا.

mgsmus علق في 16 سبتمبر 2014
لدي هذه المشكلة. كنت أستخدم خادم الويب المدمج في PHP عبر "artisan serve". لقد تحولت إلى Apache وتم حل المشكلة. أعتقد أن السبب هو خيوط المعالجة المتعددة التي لا يدعمها الخادم المدمج.

هل يستخدم أي منكم "خدمة الحرفيين"؟

أنا أستخدم "خدمة الحرفيين". ملاحظة جيدة. يعد استخدام الخادم المدمج أمرًا سهلاً بدرجة كافية ولكنه لا يمثل البيئة الحقيقية ، وسأفكر في استخدام Apache بدلاً من ذلك بعد ذلك ..

شكرا ياyajra . راجع للشغل لقد قمت بحل مشكلة رمز csrf من خلال اقتراحك. فاتني توثيق Laravel. أين يمكنني إيجاد طريقة لتغيير نوع طلب أجاكس في html builder؟

mrofi ، شكرًا على التأكيد. ربما ترجع هذه المشكلة حقًا إلى "خدمة الحرفيين".

بالنسبة إلى ajax ، يمكنك إرسال معلمة مصفوفة إليه كما هو موضح أدناه.

->ajax([
  'url' => 'url',
  'type' => 'post'
])

أكد العديد من المستخدمين أن المشكلة كانت بسبب "الخدمة الحرفية". سيؤدي استخدام apache / nginx إلى حل المشكلة. شكرا!

أنا أستخدم أباتشي على جهاز فيدورا ، باستخدام محلي عبر ملف المضيفين وأواجه نفس المشكلة بالضبط. أيه أفكار؟

لقد حللت هذه المشكلة الصغيرة على النحو التالي
يستبدل: أياكس: "مورد" ،

بواسطة:
أياكس: {
url: "مورد" ،
الرؤوس: {'X-CSRF-TOKEN': رمز} ،
نوع البيانات: "JSON" ،
قبل الإرسال: الوظيفة (xhr) {
xhr.setRequestHeader ('التخويل') ،
}
} ،

بعض النصائح
1) ربما يستدعي Ajax القيام بـ POST أو GET لذلك تحتاج إلى تكوين مسارك في أي
""
المسار :: أي ('campos / data'، ' CamposControllerdata ') -> name ('campos.data') ؛

2) Dont forget add the token before the ajax calling (in my case is Laravel)

$ .ajaxSetup ({
الرؤوس: {
"X-CSRF-TOKEN": "{{csrf_token ()}}"
}
}) ؛

3) I have that issue in using php artisan on Windows. If you use on Linux or Apache you wont have errors. 
4) Error 401 is becouse the session was expired. You need a login again. You could handler the error and take some action

"أياكس": "/ مورد"،
"خطأ": الوظيفة (السبب) {
console.log ("خطأ مصادفة!")؛
// سبب العملية هنا لمعرفة نوع الخطأ
// ثم اتخاذ الإجراء المناسب
}
""

قراءة التعليقات ،
لقد حللت المشكلة جيدا
في الرأي
var token = '{{ csrf_token() }}';

ajax: { url:'$url', type:'post', data: { '_token': token } },

"var table = $ ('# myTable') ؛

        oTable = table.dataTable({
            processing: true,
            serverSide: true,
            order: [[1, 'desc']],
            buttons: [
                { extend: 'print',  className: 'btn dark btn-outline'       },
                { extend: 'copy',   className: 'btn red btn-outline'        },
                { extend: 'pdf',    className: 'btn green btn-outline'      },
                { extend: 'excel',  className: 'btn yellow btn-outline'     },
                { extend: 'csv',    className: 'btn purple btn-outline'     },
                { extend: 'colvis', className: 'btn dark btn-outline', text: 'Columns'}
            ],
            ajax: {
                url:'$url',
                type:'post',
                data: {
                    '_token': token
                }
            },
            $col,
            \"oLanguage\": {
                \"sEmptyTable\":   \"No se encontraron resultados\",
                \"sInfo\":         \"Mostrando _START_ a _END_ de _TOTAL_ filas\",
                \"sInfoEmpty\":    \"No se encontraron resultados\",
                \"sInfoFiltered\": \"(Filtrado de _MAX_ total de filas)\",
                \"sLengthMenu\":   \"Ver _MENU_ filas\",
                \"sSearch\":       \"Buscar:\",
                \"sZeroRecords\":  \"No se encontraron resultados\"
            },
            \"aoColumnDefs\": [
                { \"bSortable\": false, \"aTargets\": [ 0,-1 ] }

و
{\ "iDataSort \": 1، \ "aTargets \": [0]}،

                { \"sWidth\": \"20px\",   \"aTargets\": [ 0,-1 ]  },


            ]
        });


        table.on(\"keyup\", \"input[type=search]\", function () {
            /* Filter on the column (the index) of this element */
            oTable.fnFilter(this.value, $(\"thead input\").index(this));
        });

        $('#sample_1_tools > li > a.tool-action').on('click', function() {
            var action = $(this).attr('data-action');
            //console.log(action);
            oTable.DataTable().button(action).trigger();
        });

"

@ jarm-mcs شكرًا على الحل ، إنه يعمل :)

مرحبًا ، لقد واجهت هذه المشكلة أيضًا وقمت بحلها باستخدام رؤوس axios في تكوين Ajax. أنا أستخدم Laravel Passport ، ولا أعرف ما إذا كان مرتبطًا به ، لأنه يعمل باستخدام محاور بسيطة

bootstrap.js الخاص بي

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

/**
 * Next we will register the CSRF Token as a common header with Axios so that
 * all outgoing HTTP requests automatically have it attached. This is just
 * a simple convenience so we don't have to attach every token manually.
 */

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

نصي DataTables

$(function() {
            $('#users-table').DataTable({
                processing: true,
                serverSide: true,
                ajax: {
                    'url':'{!! route('api.games.index') !!}',
                    'headers':window.axios.defaults.headers.common
                },
                columns: [
                    { data: 'id', name: 'id' },
                    { data: 'name', name: 'name' },
                    { data: 'created_at', name: 'created_at' },
                    { data: 'updated_at', name: 'updated_at' }
                ]
            });
        });

قراءة التعليقات ،
لقد حللت المشكلة جيدا
في الرأي
var token = '{{ csrf_token() }}';

ajax: { url:'$url', type:'post', data: { '_token': token } },

"var table = $ ('# myTable') ؛

        oTable = table.dataTable({
            processing: true,
            serverSide: true,
            order: [[1, 'desc']],
            buttons: [
              { extend: 'print',  className: 'btn dark btn-outline'       },
              { extend: 'copy',   className: 'btn red btn-outline'        },
              { extend: 'pdf',    className: 'btn green btn-outline'      },
              { extend: 'excel',  className: 'btn yellow btn-outline'     },
              { extend: 'csv',    className: 'btn purple btn-outline'     },
              { extend: 'colvis', className: 'btn dark btn-outline', text: 'Columns'}
          ],
            ajax: {
                url:'$url',
                type:'post',
                data: {
                    '_token': token
                }
            },
            $col,
            \"oLanguage\": {
              \"sEmptyTable\":   \"No se encontraron resultados\",
              \"sInfo\":         \"Mostrando _START_ a _END_ de _TOTAL_ filas\",
              \"sInfoEmpty\":    \"No se encontraron resultados\",
              \"sInfoFiltered\": \"(Filtrado de _MAX_ total de filas)\",
              \"sLengthMenu\":   \"Ver _MENU_ filas\",
              \"sSearch\":       \"Buscar:\",
              \"sZeroRecords\":  \"No se encontraron resultados\"
          },
          \"aoColumnDefs\": [
              { \"bSortable\": false, \"aTargets\": [ 0,-1 ] }

و
{"iDataSort": 1 ، "aTargets": [0]} ،

              { \"sWidth\": \"20px\",   \"aTargets\": [ 0,-1 ]  },


            ]
        });


        table.on(\"keyup\", \"input[type=search]\", function () {
          /* Filter on the column (the index) of this element */
          oTable.fnFilter(this.value, $(\"thead input\").index(this));
      });

        $('#sample_1_tools > li > a.tool-action').on('click', function() {
            var action = $(this).attr('data-action');
            //console.log(action);
            oTable.DataTable().button(action).trigger();
        });

"

شكرا للحل.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات