Laden Sie die Ajax-Anfrage mit neuen Parametern neu

Lesezeit: 4 Minuten

Benutzer-Avatar
Muflix

Ich erhalte Tabellendaten aus der Datenbank per AJAX-Anfrage. Und ich muss die Datenparameter in der AJAX-Anforderung ändern und die Tabelle aktualisieren.

Ich aktualisiere die Tabelle mit Befehl

$('#table1').DataTable().ajax.reload();

Ich habe folgenden Code

$('#table1').DataTable({

    /* SERVER SIDE PROCESSING */
                "serverSide": true,
                "ajax":
                    {
                        "url": "Home/Search",
                        "type": "POST",
    
                        "data": {
                            'searchType': GetSearchType(),
                            'searchText': GetSearchText()
                            //'searchType': $.mynamespace.searchType
                            //'searchText': $.mynamespace.searchText
                            //'searchType': localStorage.getItem("searchType"),
                            //'searchText': localStorage.getItem("searchText"),
                        }
                    }
            });

Aber nach dem Neuladen von AJAX wird die ursprüngliche Anfrage an den Server gesendet und neue Parameterwerte werden ignoriert. Ich habe versucht, die Daten über Funktion, globale Variable und Browserspeicherung an die Anfrage zu übergeben, aber keiner der Ansätze funktioniert. Im Internet finde ich Lösung mit

aoData.push() 

Funktion, aber ich weiß nicht, wie man es benutzt.

Meine Version von jQuery DataTables ist 1.10.7.

Ich habe auch versucht, die Tabelle mit diesem Code zu zerstören und neu zu erstellen:

$('#table1').DataTable({
        "ajax":
            {
                "url": "Home/Search",
                "type": "POST",

                "data": {
                    'searchType': GetSearchType(),
                    'searchText': GetSearchText()
                }
            },
        "destroy" : true
    }).ajax.reload();

aber ich bekomme Fehlermeldung:

DataTables-Warnung: Tabellen-ID = Tabelle1 – Ajax-Fehler (http://www.datatables.net/manual/tech-notes/7)

Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter „draw“ vom Typ „System.Int32“, der keine Nullwerte zulässt.

Benutzer-Avatar
Gyrocode.com

Sie können Funktion als Wert für verwenden ajax.data Option wie unten gezeigt.

Auf diese Weise wird Ihr Code jedes Mal ausgeführt, wenn der Client eine Anfrage an den Server stellt, und nicht einmal wie bei Ihrem ursprünglichen Code.

$('#table1').DataTable({
   "serverSide": true,
   "ajax": {
      "url": "Home/Search",
      "type": "POST",
      "data": function(d){
         d.searchType = GetSearchType();
         d.searchText = GetSearchText();
      }
   }
});

Dann benutze $('#table1').DataTable().ajax.reload() wenn Sie die Tabelle neu laden müssen oder $('#table1').DataTable().ajax.reload(null, false) wenn Sie die aktuelle Seite nicht zurücksetzen möchten. Sehen ajax.reload() für mehr Informationen.

  • Vielen Dank. Beachten Sie, dass die obige Methode auch zum Aktualisieren von Parametern für Aufrufe von table.ajax.reload() funktioniert, nicht nur für die Tabelleninitialisierung. Dies gilt auch dann, wenn Sie jquery (oder Javascript) verwenden, um Parameter aus dem aktuellen Inhalt des Formularelements und/oder Modellwerten über Razor zu aktualisieren. Getestet in DataTables v1.10+ mit guten Ergebnissen. 🙂

    – IdahoB

    16. August 2018 um 17:45 Uhr


  • Es funktioniert bei mir nicht, ich bekomme: Uncaught TypeError: Cannot read property ‘reload’ of undefined

    – Michael Fieber

    14. Februar 2019 um 20:31 Uhr

  • @MichaelFever, stellen Sie sicher, dass Sie verwenden DataTable() und nicht dataTable().

    – Gyrocode.com

    15. Februar 2019 um 17:16 Uhr

  • Rette meinen Tag! Schön Bruder.

    – MONSTEEEER

    23. August 2019 um 3:44 Uhr

$('#table1').DataTable().ajax.url("?some_param=1&another=2").load();

Dies ist eine andere Lösung. Fügen Sie Ihre Parameter in den Standarddatentabellenparametern hinzu.

Wie wird die Ajax-URL einer Datentabelle dynamisch festgelegt?

  • Das ist genau das, was ich brauchte! Konnte die serverseitige Verarbeitungslogik (serverSide: true} vermeiden, indem ich diese Lösung verwendete, als ich meine eigene Paginierungslogik erstellte, um die gleichzeitige Anzeige von Nummerndatensätzen zu steuern, danke!

    – Tempel

    25. September 2020 um 20:51 Uhr

Okay, ich habe die Lösung gefunden, bei der Neuinitialisierung der Tabelle müssen alle Einstellungen erneut angegeben werden, da sie sonst von den Standardeinstellungen übernommen werden. so ist der endgültige Code

$('#table1').DataTable({
            "iDisplayStart": 0,
            "iDisplayLength": 50,
            "bPaginate": true,
            "bSort": false,
            "serverSide": true,
             /* and all others settings others than default */
        "ajax":
            {
                "url": "Home/Search",
                "type": "POST",

                "data": {
                    'searchType': GetSearchType(),
                    'searchText': GetSearchText()
                }
            },
        "destroy" : true  /* <---- this setting reinitialize the table */
    }).

aber wenn jemand eine bessere Lösung findet, teilen Sie sie bitte mit.

  • Vielleicht hat der ‘destroy’-Parameter in früheren Versionen funktioniert, aber zumindest in den Versionen 1.10 oder neuer von DataTables funktioniert er nicht mehr (daher die Ablehnung – sorry!). Die Verwendung einer Funktion, wie in der ersten Antwort beschrieben, funktioniert jedoch.

    – IdahoB

    16. August 2018 um 17:43 Uhr


So realisiere ich es:

var onSearchClick = function () { search(); };

    var search = function () {


        var startDate =  $('#datetimepicker1').find("input").val();
        var endDate = $('#datetimepicker2').find("input").val();

        $.ajax({
            type: "GET",
            url: "/api/getByDate?startDate=" + startDate + "&endDate="+endDate,
            datatype: "json",
            traditional: true
        })
        .done(function (data) {

          var table = $('#data-table-1').DataTable({
              data: data.data,
              destroy: true,
              "columns": [
             { "data": "id" },
             { "data": "id2" },
             { "data": "id3" }
              ],
              "columnDefs": [
           {
               "targets": [1],
               "visible": false,
               "searchable": false
           },
            {
                "targets": [2],
                "visible": false,
                "searchable": false
            }],
              "sPaginationType": "full_numbers"
          });
      });
    };

Benutzer-Avatar
Sam Ruben

AJAX lädt Header beim ersten Laden der Seite als Variable. Wenn Sie die Überschriften geändert und etwas sortiert/gesucht haben. Neue Header werden nicht gesetzt, es sei denn, Sie setzen neue Header mit “beforeSend”. Ich habe den Beispielcode bereitgestellt.

Versuche dies,

$scope.dtOptions = DTOptionsBuilder.newOptions()
.withOption('ajax', {
    url: 'url',
    'beforeSend': function (request) {
        request.setRequestHeader("Authorization","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9");
        request.setRequestHeader("Subscription-Key","1d64412357444dc4abc5fe0c95ead172");
    } ,

    //},
    type: "POST",
    cache: false, // It will not use cache url

})

1227850cookie-checkLaden Sie die Ajax-Anfrage mit neuen Parametern neu

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

Privacy policy