jQuery appel AJAX à un WebMethod ASP.NET

J’ai la demande jQuery AJAX suivante:

function sendUpdate(urlToSend) { var code = AccessCode; var url = urlToSend; var options = { error: function(msg) { alert(msg.d); }, type: "POST", url: "webmethods.aspx/UpdatePage", data: "{ accessCode: " + code + ", newURL: '" + url + "' }", contentType: "application/json; charset=utf-8", dataType: "json", async: true, success: function(response) { var results = response.d; } }; $.ajax(options); } 

Et le WebMethod ASP.NET correspondant:

 [WebMethod] public static bool UpdatePage(ssortingng accessCode, ssortingng newURL) { bool result = true; try { HttpContext.Current.Cache[accessCode + "l"] = newURL; } catch { result = false; } return result; } 

Tout cela fonctionnait correctement avec “async: false”, cependant je dois m’en débarrasser car il bloque le navigateur jusqu’à la réception de la réponse. Maintenant, la demande AJAX ci-dessus renvoie “undefined”.

Quelqu’un pourrait-il me dire pourquoi cela se produit et où se situe le problème?

Merci.

Vous devez vraiment vous assurer de coder correctement ce JSON. JSON.ssortingngify est la méthode la plus fiable:

 data: JSON.ssortingngify({ accessCode: code, newURL: url }) 

Cela garantit que même si les variables code et url contiennent des caractères dangereux qui briseront vos concaténations de chaînes dans le code JSON résultant, tout sera correctement codé. La méthode JSON.ssortingngify est intégrée dans les navigateurs modernes, mais si vous devez prendre en charge Legacy, vous pouvez inclure json2.js .

De plus, comme votre code ne bloque plus, vous devez vous assurer que si vous appelez cette sendUpdate partir d’un clic de bouton ou d’un formulaire, vous annulez l’action par défaut en renvoyant la valeur false.

Mon chemin fonctionne correctement:

 [System.Web.Services.WebMethod()] public static ssortingng getHello(ssortingng str) { //do some things with str return str; } 

Dans le fichier .js, je définis cette fonction pour appeler webmethod dans le fichier .cs:

 function CallServerFunction(StrPriUrl, ObjPriData, CallBackFunction) { $.ajax({ type: "post", url: StrPriUrl, contentType: "application/json; charset=utf-8", data: ObjPriData, dataType: "json", success: function (result) { if (CallBackFunction != null && typeof CallBackFunction != 'undefined') { CallBackFunction(result); } }, error: function (result) { alert('error occured'); alert(result.responseText); window.location.href = "FrmError.aspx?Exception=" + result.responseText; }, async: true }); } 

Ensuite, appelez pour utiliser (appelez file.js):

  var text = $("#textbox_send").val(); var myresult; CallServerFunction("Default.aspx/getHello", JSON.ssortingngify({ str: text }), function (myresult) { if (text != "") $('#' + id).append('

' + $("#account_user").text() + ': ' + myresult.d + '

'); });

Le “non défini” pourrait être le résultat d’une erreur de serveur. Si vous utilisez Firebug, Firefox (ou tout autre outil de débogage de client performant), vous pouvez rechercher l’erreur renvoyée par le serveur. Collez l’erreur, le cas échéant.

Néanmoins, j’ai également noté que les “données” de “accessCode” n’étaient pas correctement placées entre guillemets ”

L’option de données corrigée serait:

 data: "{ accessCode: '" + code + "', newURL: '" + url + "' }", 

PS: Puisque les “options” ont une signification différente dans Jquery, je vous conseillerais de changer le nom de la variable en tant que “paramètre”. Changez les ‘options de var’ en ‘var settings’. 🙂