这是一开始的代码
if(request){ request.onreadystatechange = onReadyStateChange; request.open(HttpMethod,url,true);//这里HttpMethod是一个POST request.send(params);//params是 username = 123 }
这个是我在Servlet端得到的代码
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("parameters=====>"+req.getParameter("username")); }
得到结果就是一个 NULL ,之后看了别人的博客才知道
这里没有设置"Content-Type" 后台是无法用req.getParameter()方法获取数据的。那么之后就再里面加上content-type
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
果然成功了。但是问题又出现了,我把方法换成get 在URL后面加上QueryString。没有设置Content-Type.但居然成功了这是为什么?看代码
if(request){ // if request is not null request.onreadystatechange = onReadyStateChange; request.open("get","check.do?username=123",true); request.send(null); }
为什么POST需要设置Content-type而对于GET则是不设置也能得到呢?
此时我们就必须要了解"x-www-form-urlencoded"是干什么的?application/x-www-form-urlencoded: 数据被编码为名称/值对(也就是键值对)而且相邻键值对以&符号分割开,这个和Query是不是一样?所以这就是为什么GET方法不要设置Content-type的原因