2012-04-12 13 views
4

Wenn es aktuell ist, wird das Problem des Call-Stack-Überlauf auftreten?Ist dies eine aktuelle Implementierung von Long-Polling?

, weil es selbst nennen unendlich rekursiv

Wenn es ein solches Problem wird auftritt, gibt es eine bessere Umsetzung?

function waitForMsg(){ 
    $.ajax({ 
     type: "GET", 
     url: "xxx.php", 
     async: true, 
     cache: false, 
     timeout: 600000, 
     success: function(data){ 
      handleFunction(data); 
      waitForMsg(); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      XMLHttpRequest.abort(); 
      waitForMsg(); 
     } 
    }); 
} 
+0

Ich glaube nicht, dass Sie ein Problem damit haben werden. So wie es codiert ist, ist immer nur eine Anfrage aktiv. –

Antwort

1

Ich nehme an, es ist eine Art von Rekursion, aber nicht streng in Bezug auf den aktuellen Kontext, da Sie anonyme Funktionen auf ein Objekt sind hinzufügen, die in der Ajax-Funktion übergeben wird, und die Ajax-Aufruf kehrt sofort zurück (es tut nichts, um die Funktionen zu bewerten). Wenn der Ajax schließlich erfolgreich ist oder fehlschlägt, steht die Funktion, die aufgerufen werden muss, in einem völlig neuen Kontext mit unterschiedlichen Stapelwerten und Stapelpositionen.

BTW, ich bin mir nicht sicher, ob ich die XMLHttpRequest.abort(); Aufruf verstehen. Zu diesem Zeitpunkt ist der XMLHttpRequest bereits fehlgeschlagen, daher sollte der Abbruch nicht notwendig sein (würde ich denken!).