2009-01-07 11 views
0

J'ai trouvé this AJAX .NET framework l'autre jour, et jusqu'à présent j'apprécie de travailler avec. Cependant, une chose que je ne peux pas comprendre (la documentation est plutôt mauvaise atm) est comment passer des variables à travers le script AJAX. C'est ce que je jusqu'à présent:Passer des variables avec AjaxPro

//default2.aspx.vb 
    <AjaxPro.AjaxMethod()> _ 
    Public Shared Function testSomething(ByVal value As String) As String 
    Return value 
    End Function 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    AjaxPro.Utility.RegisterTypeForAjax(GetType(Default2)) 
    End Sub 

//default2.aspx 
    <a href="#" onclick="doTest(1);">test something</a> 
    <div id="temp" style="margin:15px 15px 0px 5px; padding:10px;"></div> 
    <script type="text/javascript"> 
    function doTest(x){ 
     Default2.testSomething(doTest_callback,x) 
    } 
    function doTest_callback(res,x){ 
     alert(res.value); 
     document.getElementById("temp").innerHTML = ">>>> " + x + " <<<<" 
    } 
    </script> 

J'ai deux ou trois autres fonctions de test qui fonctionnent bien, et ils le font des opérations relativement plus complexes. Quelqu'un a un aperçu de la façon de passer des variables avec AjaxPro? Les méthodes alternatives sont également les bienvenues!

Répondre

0

Cela fait un moment que j'ai utilisé ce framework (version 6.9.22.2, donc les choses ont peut-être changé un peu) - avez-vous jeté un œil au ASP.NET AJAX framework? Je ne sais pas combien de travail Michael a fait à ce sujet depuis qui est sorti - certianly ses messages de blog à ce sujet tarie autour de Juillet 2007.

Quoi qu'il en soit, si je comprends bien votre question à droite, vous voulez:

  1. passage d'une valeur à votre méthode côté serveur
  2. utiliser cette valeur quelque part dans votre appel retour méthode

Tout d'abord, pour transmettre des variables à vos méthodes, ne devraient-ils se présenter devant le nom de la fonction de rappel?

Pour récupérer les valeurs initiales dans le rappel, je soit:

  1. les remboursai dans le cadre d'un objet de retour JSON
  2. les Stocké dans une variable en dehors du champ d'application des deux fonctions

voulez-vous profiter l'option 2, vous auriez:

<a href="#" onclick="doTest(1);">test something</a> 
<div id="temp" style="margin:15px 15px 0px 5px; padding:10px;"></div> 
<script type="text/javascript"> 
    var initialValue; 

    function doTest(x){ 
    initialValue= x; 
    Default2.testSomething(x, doTest_callback) 
    } 

    function doTest_callback(res){ 
    alert(res.value); 
    document.getElementById("temp").innerHTML = ">>>> " + initialValue + " <<<<" 
    } 
</script> 

L'inconvénient principal wi Cela signifie que si l'utilisateur lance votre méthode "doTest" avec une valeur différente alors que vous traitez encore la première requête, la valeur de initialValue pourrait bien avoir changé au moment où elle est interrogée dans doTest_callback.

0

Hmm. Avez-vous remarqué des erreurs JavaScript? Si Firefox et FireBug sont installés, y a-t-il des erreurs dans la console JavaScript?

Il semble qu'il y ait un problème avec les fichiers JS générés par le composant.

1

Avec AjaxPro vous passez d'abord les paramètres et une fonction de rappel comme dernier paramètre. Si vous utilisez une fonction anonyme, vous pouvez accéder à la fois à la réponse et à la valeur d'origine. Il serait ressemble à quelque chose comme ceci:

function doTest(x){ 
    Default2.testSomething(x, function(res){ 
     doTest_callback(res.value, x); 
    }); 
} 
function doTest_callback(resonseValue,originalValue){ 
    alert("response: " + responseValue); 
    alert("original: " + originalValue); 
} 
1

Je sais que c'est un ancien, mais je l'ai utilisé AjaxPro pour toujours et toujours utiliser avec .NET 4 - Il fait toujours l'affaire.

Si vous souhaitez transmettre une variable supplémentaire avec le rappel et le récupérer dans le résultat, passez la valeur après le rappel et utilisez res.context pour le récupérer.

Comme ceci:

function CallSomething() 
{ 
    DoServerSide.MethodName(arg1, arg2, CallbackFunction, ExtraVar); 
} 

function CallbackFunction(res) 
{ 
    var result = res.value; 
    var extra = res.context; 
} 
Questions connexes