文章来源:https://wwwdev.cn/article/20100302/ajax-post-content-type-no-set.aspx
今天在CSDN看到一个ajax指定了提交方式为post,但是设置了content-type为text/plain的时,如何在提交的页面获取提交值的问题。由于content-type为text/plain,动态页并未帮你处理成键值对的形式,所以你得自己使用2进制流数据生成对应的string类型的数据。
希望下面的对有需要的朋友有帮助。
1)要生成键值对形式,你得指定content-type为“application/x-www-url-encoded”
xhr.open("post","动态页",true); xhr.setRequestHeader("content-type","application/x-www-url-encoded");//注意要在open后才能调用setRequestHeader
这样就可以在动态页使用下面的代码来获取对应的键值。
string v=Request.Form["键"];
2)在发送数据时未指定键,则可以使用Request.Form.ToString()获取提交的内容
xhr.open("post","test.aspx",true); xhr.setRequestHeader("content-type","application/x-www-url-encoded"); xhr.send("123456789");
string v=Request.Form.ToString();//得到123456789
3)未设置content-type或者content-type设置成非application/x-www-url-encoded,则需要读取2进制流数据
xhr.open("post","test.aspx",true); xhr.send("123456789");
if (Request.InputStream.Length > 0){ System.IO.StreamReader reader = new System.IO.StreamReader(Request.InputStream);//注意如果必要时可以指定编码值,防止出现乱码 string v=reader.ReadToEnd();//值为123456789 reader.Close(); }
4)对于xhr提交方式为post,链接在url后的参数都可以使用Request.QueryString["键"]来获取
xhr.open("post","test.aspx?m=MM",true); xhr.setRequestHeader("content-type","application/x-www-url-encoded"); xhr.send("123456789");
string v=Request.Form.ToString();//得到123456789 string m=Request.QueryString["m"];//得到MM
综合测试例子test.aspx
<%@ Page language="C#" ValidateRequest="false"%> <mce:script runat="server"><!-- protected void Page_Load(object sender, EventArgs e) { System.Xml.XmlDocument doc = null; if (Request.InputStream.Length > 0)//非 application/x-www-form-urlencoded类型 { System.IO.StreamReader reader = new System.IO.StreamReader(Request.InputStream); doc = new System.Xml.XmlDocument(); doc.LoadXml(reader.ReadToEnd()); reader.Close(); } if (Request.Form.Count > 0)// application/x-www-form-urlencoded类型 { doc = new System.Xml.XmlDocument(); doc.LoadXml(Server.UrlDecode(Request.Form.ToString())); } if (doc != null) { Response.Write(doc.GetElementsByTagName("item")[0].InnerText + "/n" + Request.QueryString["m"]); Response.End(); } } // --></mce:script> <mce:script type="text/javascript"><!-- var xhr=new ActiveXObject("microsoft.xmlhttp"); xhr.open("post","alexa.aspx?m=MM",true) //xhr.setRequestHeader("Content-Type", "text/plain"); //xhr.setRequestHeader("content-type","application/x-www-form-urlencoded") xhr.send("<root><item>1</item></root>"); xhr.onreadystatechange=function(){ if(xhr.readyState==4)alert(xhr.responseText) } // --></mce:script>
更多ajax问题请参考,ajax问题总结