jQuery-Datentabellen Ajax-Callback

Lesezeit: 3 Minuten

Benutzeravatar von Bob Baddeley
Bob Baddeley

Ich verwende jQuery DataTables und mache serverseitige Daten. Ich versuche, eine Funktion aufzurufen, wenn der Ajax-Aufruf zurückkehrt. Ich habe versucht, dies einzufügen fnCallback2 die meine Funktion und die ursprüngliche Funktion aufruft, aber jQuery wirft nur einen Fehler (und sagt mir nicht, was der Fehler ist) und überspringt.

$("#brands").dataTable( {
"bServerSide" : true,
"sAjaxSource" : "ajax.php",
"fnServerData" : function(sSource, aoData, fnCallback) {
    fnCallback2 = function(a,b,c){
        fnCallback.call(a,b,c);
        update_editable();
    };
    $.ajax( {
        "dataType" : 'json',
        "type" : "POST",
        "url" : sSource,
        "data" : aoData,
        "success" : fnCallback2
    });}});

Ich habe auch versucht, das hinzuzufügen fnInitComplete -Parameter, der aber nur beim ersten Mal aufgerufen wird, nicht nach nachfolgenden Seiten.

"fnInitComplete": function(){
update_editable();
},

Wie rufe ich meinen Code nach der Ajax-Anfrage richtig auf, damit der ursprüngliche Rückruf auch aufgerufen wird?

Eine weitere Möglichkeit ist die Verwendung von fnDrawCallback die nach jedem Ziehungsereignis aufgerufen wird. Was nach jeder Ajax-Anfrage durchgeführt wird.

"fnDrawCallback" : function() {
    update_editable();
}

  • Das funktionierte wie am Schnürchen! Es wurden jedoch jedes Mal AJAX-Funktionen wie jQueryUI-Dialoge ausgelöst, also dachte ich, hier zu teilen, dass, wenn Sie eine Funktion binden, zuerst das Ereignis lösen müssen, damit es funktioniert. IE: “fnDrawCallback”: function() { $(“#ask_container” ).finde einen[href^=”includes/view”].t3_txt’).unbind(“click”); $(“#ask_container”).find(‘a[href^=”includes/view”].t3_txt’).on(“click”,function(b){b.preventDefault(); var ce=$(this).attr(“href”); … der Rest Ihrer Funktion steht hier!

    – Jean GT

    11. September 2012 um 22:10 Uhr


  • Der Schlüssel (früher fnDrawCallback) ist jetzt drawCallback (seit: 1.10). Außerdem erhält die Funktion a settings Objekt als erstes Argument.

    – basisch6

    21. Februar 2015 um 19:09 Uhr


  • @ basic6 Obwohl die Dokumentation das sagt settings Objekt ist NICHT optional, nichts weiterzugeben funktioniert auch. Irgendeine Idee warum/wie?

    – Sterex

    30. Juli 2015 um 20:27 Uhr

  • @Sterex: Nichts weitergeben? Datentabellen übergibt dieses Einstellungsobjekt an Ihren Rückruf. Ob Sie es verwenden oder nicht, bleibt Ihnen überlassen.

    – basisch6

    31. Juli 2015 um 16:10 Uhr


Benutzeravatar von Gyrocode.com
Gyrocode.com

LÖSUNG

Mit DataTables 1.10 gibt es mehrere Möglichkeiten, das Ajax-Abschlussereignis zu handhaben.

  • Verwenden ajax.dataSrc Möglichkeit:

    var table = $("#example").DataTable({
         serverSide: true,
         ajax: {
             url: "/test/0",
             dataSrc: function(d){
    
                 // TODO: Insert your code
    
                 return d.data;    
             }
         }
    });
    
  • Verwenden xhr Fall:

    $("#example").on('xhr.dt', function(e, settings, json, xhr){
        // TODO: Insert your code
    });
    
    var table = $("#example").DataTable({
         serverSide: true,
         ajax: {
             url: "/test/0"
         }
    });
    

Die Verwendung hat einen zusätzlichen Vorteil xhr Veranstaltung gegenüber ajax.dataSrc Möglichkeit:

Ab DataTables 1.10.7 wird dieses Ereignis sowohl durch Erfolgs- als auch durch Fehlerbedingungen ausgelöst, wenn die Ajax-Anforderung abgeschlossen ist (dh es wird immer ausgelöst, unabhängig vom Ergebnis der Ajax-Anforderung).

DEMO

Sehen diese jsFiddle für Code und Demonstration.

Benutzeravatar von Manse
Pfarrhaus

Versuchen Sie es auf diese Weise:

"fnServerData": function ( sSource, aoData, fnCallback ) {
       /* Add some extra data to the sender */
       aoData.push( { "name": "more_data", "value": "my_value" } );
       $.ajax( {
         "dataType" : 'json',
         "type" : "POST",
         "url" : sSource,
         "data" : aoData,
         "success" : function(json) {
           /* Do whatever additional processing you want on the callback, 
             then tell DataTables */
           fnCallback(json)
       } );
}

Sie können dann tun, was immer Sie vor dem tun möchten fnCallback(json); Zeile – einschließlich des Aufrufs einer Funktion.

  • Ich habe mir das angesehen, aber es erzwingt ein GET, und ich gebe möglicherweise viele Daten an den Server zurück. Ich würde gerne bei POST bleiben.

    – Bob Baddeley

    5. Oktober 2011 um 21:18 Uhr

  • @BobBaddeley Meine Antwort wurde aktualisiert – ungetestet

    – Herrenhaus

    5. Oktober 2011 um 21:23 Uhr

  • Nach dem Testen hat es nicht funktioniert. Es scheint dem zu entsprechen, was ich in der ursprünglichen Frage gepostet habe. Trotzdem danke.

    – Bob Baddeley

    5. Oktober 2011 um 22:00 Uhr

Versuche dies:

"fnServerData": function ( sSource, aoData, fnCallback ) {
    $.getJSON( sSource, aoData, function (json) { 
       fnCallback(json)
}).complete(function(){update_editable(););
}

1442790cookie-checkjQuery-Datentabellen Ajax-Callback

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy