Hoy, cuando estaba usando el método AJAX de JQuery para enviar una solicitud, descubrí que usar el archivo ashx en segundo plano no podía recibir los parámetros pasados en el método AJAX. Después de verificar el motivo en línea, encontré el problema. Resultó que especifiqué "ContentType: 'Application/JSON; Charset = UTF8'" en el método $ .AJAX, que causó los parámetros pasados al servidor al procesar la solicitud en el archivo ASHX.
La forma correcta de escribirlo es la siguiente:
$ .AJAX ({url: '/handler.ashx?operflag=test', ttype:' post ',/*Al solicitar el archivo ashx, debe eliminar el contentType, y el formato de datos es {"clave", "valor"}; recuerde no agregar cotizaciones dobles fuera de las cotizaciones, ya que esto falla si los datos no se pueden recuperar en la página ashx*///////////1 contento; charset = utf ', data: {"key": "xdp", "key": "lonely wolf"}, cache: false, dataType:' text ', éxito: function (data) {alert (data);}, error: function (xhr) {alert ("un error ocurrido, por favor intente nuevamente más tarde:" + XHR.ResponSetExt);});De esta manera, puede usar el siguiente código en el archivo ASHX para que los parámetros pasen por el método $ .AJAX, el código es el siguiente:
Cadena clave = context.Request ["Key"]; Cadena clave = context.Request ["Key"];
Solía usar el método $ .post para tratar con AJAX, por lo que no noté este problema. Esta vez, dado que fue requerido por el proyecto, utilicé $ .AJAX. No esperaba encontrar el problema anterior. Afortunadamente, descubrí el problema y resolví el problema a tiempo.
Además, he encontrado un problema extraño recientemente "Después de enviar datos a ASHX usando AJAX, y después de formatear los parámetros con JSON.Stringify, el código es el siguiente:
$ .AJAX ({url: '/handler.ashx?operflag=test', ttype:' post ', // json.stringify data de parámetro de formato: json.stringify ({"key": "xdp-gacl", "clave": "White Tiger God Emperor"}), ContentType:' Aplicación/JSON; JSON; 'json', éxito: function (data) {alert (data.key + "|" + data.key);}, error: function (xhr) {alerta ("Un error ocurrió, intente nuevamente más tarde:" + xhr.esponsetext);}});Como resultado, el método normal de usar context.Request ["key3"] en ashx no puede obtener parámetros, como se muestra en la figura a continuación:
Estuve deprimido durante mucho tiempo y no pude entender por qué sucedió esto. Al principio pensé que era causado por el Código de ContentType: 'Aplicación/JSON; charset = utf8 ', así que comenté el código:
$ .AJAX ({url: '/handler.ashx?operflag=test', ttype:' post ', // json.stringify data de parámetro de formato: json.stringify ({"key": "xdp-gaCl", "clave": "White Tiger God Emperor"}), // ContentTty: "Aplicación/JSON; 'json', éxito: function (data) {alert (data.key + "|" + data.key);}, error: function (xhr) {alerta ("Un error ocurrió, intente nuevamente más tarde:" + xhr.esponsetext);}});Pero el resultado sigue siendo el mismo. Usar context.Request ["Key3"] todavía no puede obtener los parámetros. No hay forma. Dado que no se puede obtener el método convencional, busque otro método. Baidu encontró una solución. Puede obtenerlo utilizando el siguiente método en ASHX. Primero, escriba un método general para obtener los parámetros, el código es el siguiente:
/// <summary> /// get parámetros /// </summary> /// <param name = "context"> </param> /// <surns> </sements> private Dictionary <String, object> getParameter (httpContext context) {streamReader lector = new streamsreamer (context.request.inputStream); // get json string:: string:: string: string:: string:: string:: string:: String:: strjson = {"Key": "XDP-GACL", "Key": "White Tiger God Emperor"} String StrJson = httputility.urlDecode (Reader.ReadToend ()); JavascriptSerializer jss = new JavascriptSerializererererer (); // deserialize json Cadena en un objeto de diccionario <string, objeto, objeto, objeto, objeto, objeto, objeto de neo jss.deserialize <Dictionary <String, Object >> (strjson); return Dicparameter;}El método GetParameter devuelve un objeto Dicparameter, y el Dicparameter almacena los parámetros enviados desde el método $ .Jajax a ASHX, como se muestra en la figura a continuación:
De esta manera, los parámetros pasados se pueden sacar del dicparámetro para su procesamiento. El código completo es el siguiente:
public void ProcessRequest (httpContext context) {context.Response.ContentType = "Text/Plain"; String OperAg = context.Request ["Operflag"]; if (operflag == "test") {string key = context.Request ["key"]; string key = context.Request ["Key"]; String resstrtrtrtrtrtrtrry + "|" " + key; context.Response.Write (restr);} else if (operflag == "test") {Dictionary <string, object> dicparameter = getParameter (context); string key = dicparameter ["key"]. toString (); string key = dicparameter ["key"]. toString (); stresstrr = "{/" key "/"/"/"/"/"//" "/",/"key/":/"" + key + "/"hyabs.context.response.write(resstr);}}Lo anterior son los datos enviados por el archivo ashx obtenido por el método $ .AJAX () introducido por el editor. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!