ajax指定为post但是未设置content-type时如何获取提交的内容

文章来源: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问题总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Go 旅城通票

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值