Aujourd'hui, lorsque j'utilisais la méthode AJAX de JQuery pour envoyer une demande, j'ai constaté que l'utilisation du fichier ASHX en arrière-plan ne pouvait pas recevoir les paramètres passés dans la méthode AJAX. Après avoir vérifié la raison en ligne, j'ai trouvé le problème. Il s'est avéré que j'ai spécifié "ContentType: 'application / json; charset = utf8'" dans la méthode $ .ajax, qui a provoqué les paramètres transmis au serveur lors du traitement de la demande dans le fichier ASHX.
La bonne façon de l'écrire est la suivante:
$ .ajax ({url: '/handler.ashx?operflag=test' ,ype:' post ', / * Lorsque vous demandez le fichier Ashx, vous devez supprimer le contenuype, et le format de données est {"clé", "valeur"}; charset = utf ', data: {"key": "xdp", "key": "Lonely wolf"}, cache: false, dataType:' text ', succès: function (data) {alert (data);}, error: function (xhr) {alert ("une erreur s'est produite, veuillez réessayer plus tard:" + xhr.ReponseTeText);}});De cette façon, vous pouvez utiliser le code suivant dans le fichier ASHX pour faire passer les paramètres par la méthode $ .ajax, le code est le suivant:
String key = context.request ["key"]; String key = context.request ["key"];
J'utilisais la méthode $ .post pour traiter avec Ajax, donc je n'ai pas remarqué ce problème. Cette fois, comme il était nécessaire par le projet, j'ai utilisé $ .ajax. Je ne m'attendais pas à rencontrer le problème ci-dessus. Heureusement, j'ai découvert le problème et résolu le problème dans le temps.
De plus, j'ai rencontré un problème étrange récemment, "après avoir soumis des données à Ashx à l'aide d'Ajax, et après avoir formaté les paramètres avec JSON.Stringify, le code est le suivant:
$ .ajax ({url: '/handler.ashx?operflag=test' ,ype:' post ', // json.stringify format des paramètres: "Key" 'JSON', Success: Function (data) {alert (data.key + "|" + data.key);}, error: function (xhr) {alert ("Une erreur s'est produite, veuillez réessayer plus tard:" + xhr.ResponSExt);}});En conséquence, la méthode normale d'utilisation de Context.Request ["Key3"] dans ASHX ne peut pas obtenir de paramètres, comme le montre la figure ci-dessous:
J'ai été déprimé pendant longtemps et je n'ai pas pu comprendre pourquoi cela s'est produit. Au début, je pensais que cela était causé par le code de contenu: «Application / JSON; charset = utf8 ', alors j'ai commenté le code:
$.ajax({url: '/Handler.ashx?operFlag=test',type: 'POST',//JSON.stringify format parameter data: JSON.stringify({"key": "xdp-gacl","key": "White Tiger God Emperor"}),//contentType: 'application/json; charset=utf',cache: false,dataType: 'JSON', Success: Function (data) {alert (data.key + "|" + data.key);}, error: function (xhr) {alert ("Une erreur s'est produite, veuillez réessayer plus tard:" + xhr.ResponSExt);}});Mais le résultat est toujours le même. Utilisation de context.request ["key3"] ne peut toujours pas obtenir les paramètres. Il n'y a aucun moyen. Étant donné que la méthode conventionnelle ne peut pas être obtenue, recherchez une autre méthode. Baidu a trouvé une solution. Vous pouvez l'obtenir en utilisant la méthode suivante dans ASHX. Tout d'abord, écrivez une méthode générale pour obtenir les paramètres, le code est le suivant:
/// <summary> /// Get Paramètres /// </ résumé> /// <param name = "Context"> </ param> /// <retourne> </ returns> Dictionary privé <string, objet> getParameter (httpcontext context) {streamreader reader = new StreamReader (context.request.inputStream); // Get strjson = {"key": "xdp-gacl", "key": "white tigre dieu emperor"} string strjson = httputility.urldecode (reader.readtoend ()); javascriptSerializer jss = new javascriptSerializer (); // désérialiser la chaîne json dans un objet dictionnaire jss.deserialize <dictionary <string, objet >> (strjson); retour dicparamètre;}La méthode GetParameter renvoie un objet dicparamètre, et le dicparamètre stocke les paramètres soumis à partir de la méthode $ .ajax à Ashx, comme indiqué dans la figure ci-dessous:
De cette façon, les paramètres passés peuvent être retirés du dicparamètre pour le traitement. Le code complet est le suivant:
public void processRequest (httpContext context) {context.Response.ContentType = "Text / PLAW + key; context.Response.write (RESSTR);} else if (operflag == "test") {dictionary <string, objet> dicParAmètre = getParameter (context); string key = dicParameter ["key"]. toString (); string key = dicparamètre ["key"]. "/", / "key /": / "" + key + "/"Ce qui précède est les données envoyées par le fichier ASHX obtenues par la méthode $ .ajax () introduite par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!