2009-05-15 8 views
1

Si je veux appeler une fonction de serveur de javascript pour récupérer le nom d'une personne d'une base de données (juste comme un exemple) ... et je suis allé ...Comment fonctionne ASP.NET AJAX lors de la récupération de valeurs à partir du serveur?

name = myServices.getName (userId); Si j'ai un gestionnaire de script avec une référence de service à un fichier .asmx qui a la méthode web getName (int userId) {} ​​alors cette fonction devrait être appelée correctement et retournerait éventuellement le nom de cet userId.

Malheureusement, je veux faire ....

name = myServices.getName (userId); alerte (nom); Cependant, en faisant ASP.NET AJAX, il appellerait la méthode web et continuerait à s'exécuter avant d'attendre une réponse du serveur (ce que je comprends est le point d'ajax, pour empêcher le navigateur de geler en attendant des données

Je dois récupérer le nom du serveur avant de pouvoir continuer à exécuter ... Comment puis-je aborder cette question pour résoudre ce problème?

Répondre

3

Il existe une méthode que vous pouvez ajouter en tant que paramètre à la méthode de service qui appellera la méthode en cas de réussite, dans laquelle vous pouvez effectuer d'autres tâches.

Par exemple:

function test(){ 

     PageMethods.MyMethod("name", OnMyMethodComplete); 

    } 



    function OnMyMethodComplete(result, userContext, methodName) 

    { 

     alert(result); 

    } 
+0

Je fais ce genre de chose tout le temps. Cela me sauve beaucoup d'ennuis. –

0

Si vous voulez appeler une méthode Web synchrone, vous devez configurer manuellement la demande, et d'utiliser un Sys.Net.XMLHttpSyncExecutor.

Here's an example (voir la fonction ExecuteSynchronously)

0

Pour une solution javascript, vous pourriez boucle jusqu'à ce que le nom a une valeur. Ajuster l'heure en fonction de la latence pour que l'application reste réactive

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

Félicitations. vous avez fait vos premiers pas dans un monde asynchrone plus vaste. J'irais certainement avec l'aide des rappels que CSharpAtl a suggérés.

Questions connexes