Hoje, quando eu estava usando o método Ajax da JQuery para enviar uma solicitação, descobri que o uso do arquivo ashx em segundo plano não conseguiu receber os parâmetros passados no método Ajax. Depois de verificar o motivo online, encontrei o problema. Aconteceu que eu especifiquei "ContentType: 'Application/json; charset = utf8'" no método $ .ajax, que causou os parâmetros passados para o servidor ao processar a solicitação no arquivo ashx.
A maneira correta de escrever é a seguinte:
$ .ajax ({url: '/handler.ashx?operflag=test'.type:' post ',/*Ao solicitar o arquivo ashx, você deve remover o contentType, e o formato de dados é {"tecla", "value"}; lembre -se de não adicionar as citações duplas do lado de fora do braço, pois isso falhará se o conteúdo "não pode ser rek; charset = utf ', dados: {"key": "xdp", "key": "solitário lobo"}, cache: false, datatype:' text ', sucesso: function (data) {alert (dados);}, error: function (xhr) {alert "um erro que ocorreu;Dessa forma, você pode usar o seguinte código no arquivo Ashx para obter os parâmetros passados pelo método $ .ajax, o código é o seguinte:
string key = context.request ["key"]; string key = context.request ["key"];
Eu costumava usar o método $ .post para lidar com o Ajax, então não percebi esse problema. Desta vez, como foi exigido pelo projeto, usei $ .ajax. Eu não esperava encontrar o problema acima. Felizmente, descobri o problema e resolvi o problema no tempo.
Além disso, encontrei um problema estranho recentemente ", depois de enviar dados ao ASHX usando o Ajax e depois de formatar os parâmetros com JSON.Stringify, o código é o seguinte:
$ .ajax ({url: '/handler.ashx?operflag=test'.type:' post ', // json.stringify Format Parâmetro Dados: json.stringify ({"key": "xdp-gacl", "key": "white tiger god emper"}}), contenttype:' Application/jex; 'json', sucesso: function (dados) {alert (data.key + "|" + data.key);}, erro: function (xhr) {alert ("ocorreu um erro, tente novamente mais tarde:" + xhr.roSponseText);}});Como resultado, o método normal de usar context.Request ["key3"] em Ashx não pode obter parâmetros, como mostrado na figura abaixo:
Fiquei deprimido por um longo tempo e não consegui descobrir por que isso aconteceu. No começo, pensei que foi causado pelo Código de ContentType: 'Application/JSON; charset = utf8 ', então eu comentei o código:
$ .ajax ({url: '/handler.ashx?operflag=test'.type:' post ', // json.stringify Format Parâmetro Dados: json.stringify ({"key": "xdp-gacl", "key": "white tiger god emperor"}), // contenttype ": 'json', sucesso: function (dados) {alert (data.key + "|" + data.key);}, erro: function (xhr) {alert ("ocorreu um erro, tente novamente mais tarde:" + xhr.roSponseText);}});Mas o resultado ainda é o mesmo. Usando o context.request ["key3"] ainda não pode obter os parâmetros. Não há como. Como o método convencional não pode ser obtido, procure outro método. Baidu encontrou uma solução. Você pode obtê -lo usando o seguinte método no ASHX. Primeiro, escreva um método geral para obter os parâmetros, o código é o seguinte:
/// <summary> /// Get Parameters /// </summary> /// <param name = "Context"> </aman> /// <lorpns> </returns> dicionário privado <string, object> getParameter (httpContext context) {streamader leitor = gets streamreader (context.request.instrest.input); strjson = {"key": "xdp-gacl", "key": "imperador de deus do tigre branco"} string strjson = httputility.urldecode (reader.readToEnd ()); javascriptSerializer jsS = novo javascriptserializer (); JSS.DeSerialize <Dictionary <String, Object >> (strjson); retorna dicparameter;}O método getParameter retorna um objeto DicParameter e o dicparameter armazena os parâmetros enviados do método $ .ajax para ashx, como mostrado na figura abaixo:
Dessa maneira, os parâmetros passados podem ser retirados do dicparameter para processamento. O código completo é o seguinte:
public void ProcessRequest (contexto httpContext) {context.Response.ContentType = "Text/Plain"; String operag = context.Request ["Operflag"]; if (operflag == "test") {string key = context.request ["key]; key; key = key" ") {key]; + key; context.Response.Write (Resstr);} else if (operflag == "test") {dictionary <string, object> dicParameter = getParameter (context); string key = dicParameter ["key"]. "/",/"key/":/"" + key + "/"}";Context.Response.write(resstr);}}O exposto acima são os dados enviados pelo arquivo ashx obtido pelo método $ .ajax () introduzido pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!