2016-04-20 6 views
0

Ich habe ein onclick Ereignis für eine radio button, die eine Funktion aufruft, die Zeit startet AJAX-Aufrufe zu einem gewissen urlperiodische Ajax-Aufruf Signalisierung zu beenden

Beispiel in MVC cshtml Ansicht

<script> 
     function onClick(selectedRowId) { 
      GetData("/home/GetData/" + selectedRowId); 
     }; 
</script> 

Ajax nennen

function GetData(url) { 
    $.ajax({ 
     url: url, 
     type: "GET", 
     cache: false, 
     contentType: "application/json; charset=utf-8", 
     success: onSuccess, 
     error: onError, 
     complete: function (xhr, status) { 
      setTimeout(function() { 
       GetData(url); 
      }, 10000); 
     } 
    }); 
} 

Wenn ein anderer radio button ausgewählt ist, muss ich die onClick Methode mit dem ausgewähltenaufrufenund dies initiiert erneut einen Aufruf der URL mit der anderen ID.

Ich möchte jedoch, dass der vorherige AJAX-Funktionsaufruf beendet wird, da die Methode AJAX onSuccess ein HTML-Element mit den Daten aktualisiert, die für diese spezifische ausgewählte ID abgerufen wurden.

Gibt es eine Möglichkeit, den vorherigen Anruf zu terminieren, bevor er neu gestartet wird?

Eine Möglichkeit, dies zu lösen konnte

a) sein Nicht-ID als Paramter auf den URL-Aufruf dann

b) in der onClick Methode sendet einen Aufruf an Server, um die Id Variable (diese Einstellung vornehmen, in nur einmal aufgerufen wird und Server-Daten ändern basiert gefördert (a) stellt den Server bewusst, dass alle Daten für diese Id)

c) gewährleisten, dann, dass ajax-Funktion zurückgegeben, um es auf Id Informationen

zurückgegeben werden muss Nicht s ure, wenn sich die Server-Rundfahrt hier für jeden Button-Klick lohnt.

Antwort

0

Das beste, was ich denken kann, ist jedes Mal onClick gefeuert, es muss den selectedRowIndex zwischenspeichern, die Sie nur an der zuletzt ausgewählten interessiert. Wie Sie erwähnen, muss der Server diese ID zurückgeben. Auf diese Weise müssen Sie bei Ihrer onSuccess-Funktion nur Retouren mit passender ID verarbeiten und andere ignorieren.

Ich glaube nicht, dass Sie buchstäblich vorherige Ajax stoppen können. Sie haben keinen Zugriff mehr auf das vorherige Ajax-Objekt. Ignoriere vorherige Antworten einfach.

Verwandte Themen