2017-12-26 13 views
0

bearbeiten Ich habe eine riesige Liste von Hochschulen und Schulen auf der Serverseite für jeden Bezirk in einem Staat.Wie große Anfragen von Clients beim Ändern der Auswahl in Nodejs

In einer Registrierungsseite für den Benutzer, frage ich ihn den Bezirk und wenn er einen auswählt, sende ich die Anfrage an nodejs mit dem Namen des Bezirks als Anfrage Körper. Der Server liest den Distrikt und sendet die Colleges-Liste an den Client, wo ich die Liste in das Auswahlfeld lege. (Ich sende Ajax-Anfragen an nodejs)

Das Problem ist, dass, wenn ich zu schnell auf die Bezirksauswahlbox klicke oder die Pfeiltasten benutze, es wegen all dieser internen Mehrfachanfragen steckenbleibt?

Wie können diese Methode bei Server und Client verbessert werden und wie werden solche schnellen Auswahländerungen der Auswahlbox effizient gehandhabt?

var timer = 0 ; 
     $('#select_district').on('change', function district_selection_changed() { 

      clearTimeout(timer) ; 
      timer = setTimeout(function(){ 
       $.ajax({ 
        type: "post", 
        url: "/getcolleges", 
        data: { 
         state: $("#select_state").val(), 
         district: $("#select_district").val() 
        }, 
        dataType: "json", 
        success: function (response) { 
         $("#select_college").html(""); 
         collegenameelement = document.getElementById("collegenameslist") ; 
         response.forEach((ele) => collegenameelement.innerHTML = collegenameelement.innerHTML+ 
          `<option>${ele}</option>`) 
        } 
       }) 

      } , 500) ; 
+0

['debounce'] (http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-debounce) von [RxJS] (http://reactivex.io/) rxjs /) oder ähnliche Techniken aus anderen Bibliotheken. Oder schreibe etwas selbst. – Dmitry

Antwort

0

Ich denke, es ist am besten, dass Sie die Ausführung des Antrags für eine kurze Zeit verzögern, nachdem das letzte Mal aufgerufen wird. Dieses Verhalten wird normalerweise als debounce-Funktion bezeichnet, es wird von vielen Hilfsprogrammbibliotheken wie Underscore, Lodash usw. unterstützt.

Wenn Sie nicht eine ganze Bibliothek für nur eine Funktion installieren möchten, können Sie deren überprüfen Code und implementieren Sie besitzen.

Sie können den Benutzer auch daran hindern, einen neuen Bezirk auszuwählen, wenn eine Anfrage noch bearbeitet wird, und ihnen bei Bedarf das Symbol zum Laden anzeigen.

+0

"Sie können Benutzer auch daran hindern, einen neuen Bezirk auszuwählen, wenn eine Anfrage noch bearbeitet wird, und ihnen das Symbol zum Laden anzeigen, falls erforderlich." Wie man diese Blockierung tut .please sagen Sie mir –

+0

Sie können das Eingabefeld deaktivieren, wenn Sie die Anfrage machen, und es nur wieder aktivieren, wenn die Antwort zurückkommt – Khang

+0

Ich weiß nicht warum, aber wenn Sie Debounce und Drosselung verwenden, nur die UI hängt, wenn ich die Zustände häufig sogar mit der Maus auswähle. Warum passiert das? Wie deaktiviere ich, wie ich es deaktiviere? –

Verwandte Themen