2009-05-15 8 views
1

Wenn ich eine Serverfunktion von Javascript aufrufen möchte, um den Namen einer Person aus einer Datenbank (nur als Beispiel) abzurufen ... ... und ich ging ...Wie funktioniert ASP.NET AJAX beim Abrufen von Werten vom Server?

name = myServices.getName (userId);

Wenn ich einen Skript-Manager mit einem Dienstverweis auf eine ASMX-Datei mit der Webmethode getName (int userId) {} ​​habe, sollte diese Funktion ordnungsgemäß aufgerufen werden und würde schließlich den Namen für diese userId zurückgeben.

Leider will ich tun ....

name = myServices.getName (userId); Warnung (Name); Wenn man ASP.NET AJAX ausführt, würde es die Webmethode aufrufen und die Ausführung fortsetzen, bevor auf eine Antwort vom Server gewartet wird (was, wie ich es verstehe, der Punkt von Ajax ist, um das Einfrieren des Browsers während des Wartens auf Daten zu stoppen.))

Ich muss den Namen vom Server zurückbekommen, bevor ich die Ausführung fortsetzen kann ... Wie kann ich dieses Problem beheben?

Antwort

3

Es gibt eine Methode, die Sie der Service-Methode als Parameter hinzufügen können, die die Methode auf Erfolg setzt, wo Sie andere Sachen machen können.

Zum Beispiel:

function test(){ 

     PageMethods.MyMethod("name", OnMyMethodComplete); 

    } 



    function OnMyMethodComplete(result, userContext, methodName) 

    { 

     alert(result); 

    } 
+0

Ich mache diese Art der Sache die ganze Zeit. Spart mir viel Ärger. –

0

Wenn Sie synchron eine Web-Methode aufrufe wollen, müssen Sie die Anforderung manuell einrichten, und eine Sys.Net.XMLHttpSyncExecutor verwenden.

Here's an example

0

Für eine Javascript-Lösung (ExecuteSynchronously Funktion sehen), könnten Sie Schleife, bis Name einen Wert hat. Passen Sie die Zeit basierend auf der Latenzzeit an, um die App ansprechbar zu halten.

var time = 100; 
window.setTimeout(name = '' ? wait : continue, time); 




function wait() 
{ 
    window.setTimeout(name = '' ? wait : continue, time); 
} 
function continue() 
{ 
    //code having to do with name 
    alert(name) 
} 
0

Herzlichen Glückwunsch. Sie haben Ihren ersten Schritt in eine größere asynchrone Welt gemacht. Ich würde definitiv mit den Callbacks gehen, die CSharpAtl vorgeschlagen.

Verwandte Themen