2012-10-26 17 views
5

Ich weiß, dass mein Titel nicht sehr klar ist.Wie überprüft man, ob ein Jachruf mit jQuery existiert?

Zum Beispiel ist dies die Struktur meines Code:

if (foo == something) { 
    // Ajax call 1, let it be $.ajax("foo1.html") and so on 
} else { 
    // Ajax call 2, let it be $.ajax("foo2.html") and so on 
} 

Wie würde ich, wenn $.ajax("foo1.html") testen gelaufen ist eigentlich worden?

Bitte sagen Sie mir nicht zu testen, ob foo == something wieder. Mein tatsächlicher Code ist viel, viel komplizierter, also beantworte bitte die Frage aus der Sicht des Ajax Calls.

Ist das überhaupt möglich?

Antwort

12

Ich bin nicht sicher, wenn ich Sie richtig verstanden, aber jQuery eine Latente Objekt in seine jXHR Objekt mischen und Sie können überprüfe einfach seinen Zustand.

var resp = $.ajax({}); 

// somewhere else... 
if(resp.state() === 'resolved') { 
} 

Andere Staaten sind rejected und pending, http://api.jquery.com/deferred.state/

Natürlich sehen Sie alle Vorteile von denen Objekte aswell Latente bekommen können, wie mehr Event-Handler für bestimmte Dinge danach Zugabe (.done(), .fail(), etc) oder einfach warten Sie auf für das Versprechen, mit $.when() Fullfile zu erfüllen.

+0

Ja, genau das, was ich wirklich wollte. – think123

+0

wird überprüft 'state()' ist wie zu prüfen, ob der Status von 'resp' ist ** 200 **? – vsync

+0

Ich schätze, wir werden nie die Antwort wissen ... – Denny

6

Sie können einen Rückruf in Ihren Ajax-Aufruf gesetzt:

$.ajax({ 
    url: "foo1.html" 
}).done(function() { 
    alert('Done!'); 
}); 
+0

gut, nicht genau das, was ich meinte. Aber immer noch vernünftig. – think123

3

Ich würde Setvariable vor AJAX-Aufruf und setzen Sie es in den Erfolg Callback wie folgt aus:

var isRunning = true; 

$.ajax({ 
    url: url, 
    success: function(resp){ 
     isRunning = false; 
    } 
}); 
0

Wickeln Sie den Anruf in einem Versuch zu fangen.

Wenn der Aufruf von 'foo1' fehlschlägt, weil die Methode nicht auf dem Server existiert, im Fanganruf foo zwei und dann drei ganz runter, bis Sie alle Ihre Fallbacks erschöpft haben.

Wenn Sie wissen, dass die Methode existiert und denken, dass sie fehlschlägt, legen Sie einen Status fest, der zurückgegeben werden kann, wenn der Server fehlschlägt, und dann die Rückgabe im Ajax-Callback behandelt.

+0

jQuery löst keine Ausnahmen bei fehlgeschlagenen Ajax-Anfragen aus. – Bergi

+0

, aber wenn die Methode nicht existiert, wird ein Fehler ausgegeben. –

+0

OK, aber die Existenz einer Funktion zu überprüfen sollte nicht mit Try-Catch – Bergi

1

Ich hatte ähnliche Probleme. Ich habe diesen Code verwendet:

var isRunning = false; // whether ajax call is running 
if(isRunning==false){ 
    isRunning = true; 
    $.ajax({ 
    // do your stuff 
    // make sure you set 
    isRunning = false; 
    // on success 
    }); 
} 
Verwandte Themen