Aufeinander folgende Ajax-Aufrufe
Ich brauche ein wenig Hilfe bei meiner Bewerbung design. Mit Ajax möchte ich einige PHP-Ressourcen nacheinander, aber ich glaube nicht, dass wenn es gut ist, um diese unter Verwendung von JQuery $.ajax
Methode.
Ich denke, so etwas wie das bedeutet, dass ein Falsches design:
$.ajax({
url: SERVERURL+'index.php/home/checkAvailability',
datatype: 'text',
success: function(data){
if(data == 'unavailable'){
//do stuff
}
else{
$.ajax({
url: SERVERURL+'index.php/home/getWebTree/',
dataType: 'json',
success: function(data){
//do stuff
}
});
}
}
});
Kann jemand mir einen Vorschlag für ein besseres design? Wie kann ich das gleich in einen besseren Weg?
Dank!
EDIT: wie @arnorhs sagen Sie uns, mithilfe der async-parameter könnte eine Lösung sein. Aber ich bin immer noch denken, dass es andere Lösungen anstelle von aufeinander folgenden ajax-Aufrufe.
EDIT2: checkAvailability
und getWebTree
sind PHP-Funktionen, die mit CodeIgniter habe ich entwickelt, um Ressourcen von einem externen server mit Http_Request
Objekt.
function checkAvailability() {
$this->load->library('pearloader');
$http_request = $this->pearloader->load('HTTP', 'Request');
$http_request->setURL('http://myurl');
$http_request->_timeout = 5;
$http_request->sendRequest();
$res = 'available';
if (!$http_request->getResponseCode())
$res = 'unavailable';
return $res;
}
- Wir sind gerade Stackerseigentlich Auch:), gibt es einen Grund, warum Sie call-a-web-service überprüfen Verfügbarkeit, anstatt die server-Antwort mit
503
oder ähnlich IhregetWebTree
Aufruf und Umgang mit diesem Fall in eine AJAX -error
handler? - Es wäre auch interessant zu wissen, warum Sie tun möchten mehrere Anrufe zur gleichen Zeit und nicht nur auf einen einzigen ein, mehr Informationen in der Anfrage
- Die Ressourcen werden von externen Servern geladen. getWebTree ist nur eine Funktion, die ich erstellt habe zum abrufen von einer von Ihnen. Also ich kann nicht umgehen mit 503-code, oder ich weiß nicht, wie es zu tun.
- wenn ich das richtig verstehe, sind Sie der Erteilung eines AJAX-Aufruf einer web-service, die wiederum die Erlöse rufen Sie einen anderen web service mit PEAR
HTTP_Request
und dann relais die Folge. Ist etwas, das verhindert, dass Sie beim Aufruf der zweiten web-service direkt vom client, und die Notwasserung der PHP-Ebene? - Der ganze Ort ist Gebäude mit Javascript, also kann ich nicht rufen Sie Sie direkt aus, weil diese in anderen Servern anders sind als meine.
- möchten Sie vielleicht zu prüfen, JSONP, dann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun, die fordert, alle gleiche Zeit
Wenn du möchtest, dass alle ajax-Aufrufe gleichzeitig, rufen Sie einfach an einem ajax-request direkt nach dem anderen. Man könnte auch weisen Sie den gleichen Erfolg-handler. Wenn Sie wollen, dass eine "elegante" - Ansatz, ich würde so etwas tun:
.
Eine einzelne Anfrage
Ich weiß nicht, Ihren Fall, aber natürlich ist das, was Sie wirklich versuchen sollte zu tun ist, um alle die Daten, die Sie abrufen, die in einer einzelnen Anforderung. Das wird nicht eine Belastung auf dem server der Website/Anwendung scheinen schneller für den Benutzer und eine bessere langfristige Ansatz.
Ich würde versuchen zu kombinieren
checkAvailability
undgetWebTree
in einer einzigen Anfrage. Statt für den Empfang der Daten in Javascript als text-Objekte, ein besserer Ansatz wäre, um Sie zu empfangen, als json-Daten. Zum Glück PHP bietet sehr einfache Funktionen zum konvertieren von Objekten und arrays in json, so dass Sie werde in der Lage sein, diese Objekte ziemlich einfach.Bearbeiten: kleine änderungen in den PHP-code jetzt, dass ich verstehe Ihren Fall besser.
So etwas wie dies in der PHP/CI-code:
Und der Javascript-code kann dann auf diejenigen, die von einem einzelnen ajax-request:
.
Führen Sie die Anfragen synchron
Wenn Sie die
async
parameter in der $.ajax-Optionen zufalse
die Funktionen werden in einer synchronen Mode so Ihr code wird angehalten, bis die Ausführung abgeschlossen ist.. oder wie die Dokumentation sagt:Sehen http://api.jquery.com/jQuery.ajax/
ajax
url derSERVERURL
Präfix? Tun Sie versuchen, rufen Sie einem anderen server? Es ist wichtig zu verstehen, ob Sie benötigen, verwenden Siejsonp
oder zumindest'&jsonCallback=?'
als Teil des url.async: false
es sei denn, Sie wissen, genau, was Ihr tut. Es blockiert die browser-aswell.Wenn Sie wirklich brauchen, um zwei Anrufe, die Sie ausdrucksstärker sein können mit Passive latente, die eingeführt wurde in jQuery 1.5.
Check it out-live at http://jsfiddle.net/jimmysv/VDVfJ/
Es klingt wie Sie könnte zu nutzen, die deferred-Objekt, das die neue auf jquery 1.5
http://api.jquery.com/category/deferred-object/
Programmierung mit Befehlen, die behandelt werden sollten, die sich in der Warteschlange live aus Rückrufen, und das ist genau das, was Sie tun.
Definieren Sie einen Rückruf über den Erfolg Ihrer Anfrage und senden Sie eine weitere Anfrage, sobald es ausgelöst wird, überprüft und validiert werden.
Nichts falsch mit, dass.
Das einzige, was, um es besser zu warten, ist die Festlegung der callbacks als Funktionen vor dem Aufruf und damit nur $.ajax die Funktion Namen