2016-07-12 22 views
8

Abbrechen/abbrechen Ich verwende axios für AJAX-Anfragen und reactJS + flux für Render UI. In meiner App gibt es eine dritte Seiten-Timeline (reactJS-Komponente). Die Zeitleiste kann mit dem Maus-Scroll verwaltet werden. Die App sendet nach jedem Scroll-Ereignis eine AJAX-Anforderung für die eigentlichen Daten. Problem, dass die Verarbeitung der Anforderung auf dem Server langsamer als das nächste Bildlaufereignis sein kann. In diesem Fall kann die App mehrere (normalerweise 2-3) Anforderungen haben, die bereits veraltet sind, weil der Benutzer weiter scrollt. Es ist ein Problem, weil jedes Mal beim Empfang neuer Daten die Zeitleiste neu zu zeichnen beginnt. (Weil es reactJS + flux ist) Aus diesem Grund sieht der Benutzer die Bewegung der Zeitleiste mehrmals hin und her. Der einfachste Weg, um dieses Problem zu lösen, ist es, vorhergehende Ajax-Anfragen wie in jQuery abzubrechen. Zum Beispiel:wie AJAX-Anfrage in Axios

$(document).ready(
    var xhr; 

    var fn = function(){ 
     if(xhr && xhr.readyState != 4){ 
      xhr.abort(); 
     } 
     xhr = $.ajax({ 
      url: 'ajax/progress.ftl', 
      success: function(data) { 
       //do something 
      } 
     }); 
    }; 

    var interval = setInterval(fn, 500); 
); 

Wie abbrechen/Abbruch-Anfragen in axios?

+2

Mögliches Duplikat [reactJS, wie es zu Ajax-Request hören zu stoppen] (http://stackoverflow.com/questions/37771305/reactjs-how-to-stop-it-listening-to-ajax-request) – Gintoki

+0

Ihre Verbindung half mir, dieses Problem zu lösen, aber ich frage mich immer noch, wie man eine Anfrage abbricht, hört stattdessen auf, es zu hören ... –

Antwort

9

Axios unterstützt momentan keine Ablehnungsanforderungen. Einzelheiten finden Sie unter this issue.

UPDATE: Cancellation support wurde in Axios v0.15 hinzugefügt.

+0

könntest du die Antwort nach merge PR aktualisieren? –

+1

@RajabShakirov Aktualisiert –

+0

Bitte fügen Sie ein minimales Beispiel für den Fall ein, dass die verlinkte Ressource ausfällt! – totymedli

1

Dies ist, wie ich es mit Versprechen in Knoten gemacht habe. Pollings stoppen nach der ersten Anfrage.

var axios = require('axios'); 
    var CancelToken = axios.CancelToken; 
    var cancel; 
    axios.get('www.url.com', 
         { 
         cancelToken: new CancelToken(
          function executor(c) { 
           cancel = c; 
          }) 
         } 
      ).then((response) =>{    
       cancel();    
       })