2009-03-10 15 views
3

Ich habe einen pageTest.html in lokalen Ordner, rufen Sie diese Seite eine service.ashx i = ... (das Rückgabewert param bestanden +1 erhöht) mit Ajax-Code folgen:Ajax synchrone Rückrufe

. 
. 
getIncr: function(parameters, success){ 
     $.ajax({ 
       async: false, 
       type: methodType, 
       url: getTarget, 
       data: "n="+parameters, 
       dataType:"jsonp", 
       success: success 
      }); 
    } 
. 
. 

die hTML-Seite Aufruf dieser Funktion für m Zeit (mit Skript ..):

.  
    var start = function(){ 
    . 
    . 
    var val = 0; 
    .  
    . 
    for(i=0; i<m; i++) 
    { 
     Foo.getIncr(val, function(returned_n){ 
      val = returned_n; 
     }); 

    } 

}; 

Während der Laden der Seite werden die Anrufe in "Asynchronous Modus" auszuführen, aber ich Einstellung "async: false" in Ajax . Ich lese über dieses Problem und fand den Grund, dass Ajax Anruf von page.html zu service.ashx nicht synchronisieren kann, wenn es in anderer Domäne gibt. Gibt es eine Lösung zum Ausführen von Synchronisierungsaufruf in page.html zu diesem service.ashx (in einer anderen Domäne)?

+3

Harsh, Englisch ist eindeutig nicht Domenicos erste Sprache. Und ich habe es gut verstanden. –

+0

Ill Hilfe in jeder zweiten Sprache tho th ... Thx Domenico! – Cody

Antwort

6

Nun, das Problem ist, dass Sie nicht synchron JSONP Anfragen machen können. Die Art und Weise, wie es implementiert wird, ist, wie Andy betonte, durch einen sogenannten "Script-Tag-Hack". Es gibt keine Möglichkeit, dass jQuery die Ausführung der Javascript-Anwendung stoppen kann, während sie darauf wartet, dass ein Skript-Tag gefüllt wird.

Sie rufen also die richtige Methode von jQuery auf, um eine JSONP-Anfrage zu erstellen, aber da es sich um JSONP handelt, wird die asynchrone Option nicht angewendet, und es gibt keinen Weg darum herum. Sie müssen die Anfrage asynchron bearbeiten.

Nebenbei bemerkt, es ist keine gute Idee, $ .ajax im synchronen Modus sowieso zu verwenden. Wenn die Anfrage zu lange dauert, wird der Browser blockiert und es besteht die Möglichkeit, dass der Benutzer ein Popup erhält, das sagt, dass die Seite nicht antwortet.

1

Sie können XMLHttpRequest Cross-Domäne überhaupt nicht verwenden. Es spielt keine Rolle, ob es synchron oder asynchron ist.

Da Sie scheinen, JSON (und Jsonp) zu verwenden, sollten Sie in der Lage sein zu erreichen, was Sie über das Skript-Tag-Hack wollen. Ich glaube, jQuery hat dies es eingebaut (es ist jQuery Sie übrigens verwenden?):

http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29

+0

thnks, ich überprüfe – Domenico