7
votes

Toute façon de faire un appel de pageMethods synchrones?

J'essaie de faire cela:

function DelBatch()
{var userInfo = get_cookie("UserInfo");
PageMethods.DeleteBatchJSWM(userInfo, function(result)
                                          {window.location = "BatchOperations.aspx";});
}


0 commentaires

5 Réponses :


12
votes

Appelez-le à l'aide de JQuery Ajax à la place? Il dispose d'une option ( async ) où vous pouvez sélectionner le mode Sync / async: http : //aPi.jquery.com/jquery.ajax/

Cet excellent article vous indique la meilleure façon d'appeler des pageMethods de JQuery: http://encia.com/using-jquery-a-difirecly-call-aspnet-ajax-page-methods/

essentiellement, tout ce que vous devrez faire est-ce: xxx

regarde JSON de Crockford Stringify pour une solution de mise en forme JSON.


0 commentaires

2
votes

Si vous souhaitez éviter d'utiliser JQuery, un travail autour serait d'utiliser un autre pageMethod dans lequel vous vérifiez l'état de l'opération à l'aide de la fonction JavaScript seinterval code>. C'est un peu salissant, mais cela fait le travail si vous voulez zéro jQuery et il imite la synchronicité que vous recherchez. Je l'utilise pour les grandes opérations dans lesquelles je veux mettre à jour une barre de progression vers le client ou quelque chose. Voici un exemple de la façon dont vous feriez cela donné ce que vous avez donné le code que vous avez affiché: xxx pré>

code derrière: strong> p>

[WebMethod]
public static string CheckDeleteBatchStatus()
{
    string status = GetDeleteBatchStatus(); //some function to get the status of your operation
    return status;
}


0 commentaires

1
votes

Je suis tombé sur ce site:

http://abhijit-j-shety.blogspot.com/2011/04/aspnet-ajax-calling-pageMethods.html

qui avait une excellente méthode permettant de manipuler des appels de pageMethod synchrones.

Le code JavaScript est comme suit: xxx


1 commentaires

Il me semble que cela serait mieux s'il était capable de gérer des arguments arbitraires à la fonction WebMethodcall, mais je ne sais pas comment faire cela.



1
votes

Utilisation de jQuery était d'abord recommandé A> Retour en 2009.

Une autre option (extrêmement verbeuse) met en œuvre un WebRequestExecutor synchrone comme indiqué sur ici (2007-07-04), et perfectionné ICI (2007 -10-30). Le gist de la technique est de copier l'ASP.NET AJAX SYS.NE.XMLHTTPExecutor en tant que nouvelle classe nommée SyS.NE.XMLHTTTPSynceCorTutor et modifier l'appel vers XMLHTTPQUEST.OPEN CODE> Pour réussir FALSE Comme dernier paramètre pour forcer le fonctionnement synchrone. P>

L'exécuteur synchrone peut être branché sur toutes les demandes en utilisant WebRequestManager comme ceci: p> xxx pré>

ou vous voudrez peut-être le changer par demande Juste avant d'être invoqué : P>

Sys.Net.WebRequestManager.add_invokingRequest(function(sender, args) {
 if (iFeelLikeRunningThisRequestSynchronously) {
  args.get_webRequest().set_executor(new Sys.Net.XMLHttpSyncExecutor());
}});


0 commentaires

0
votes

J'ai écrit ceci, qui vous permet d'appeler une pageMethod de manière synchrone. Il suffira également de renvoyer le résultat de la méthode et de lancer une erreur qui peut être prise dans un bloc d'essai / attraper, de sorte que vous n'avez pas à vous soucier de fournir des fonctions onSuccess et onerror.

try {
    var result = synchronusPageMethod(PageMethods.myMethod, argument0, argument1);
    console.log(result);
} catch(error) {
    console.log(error);
}


0 commentaires