ajax的post传值为何要加请求头

setRequestHeader('Content-type','application/x-www-form-urlencoded');

'Content-type','application/x-www-form-urlencoded'
这说明你post的数据是使用url编码的,所谓url编码,就是遇到特殊字符用%XX的方式转义。

下面是http发送数据时的一些数据编码格式,你可以看看,希望能为你解惑

值                                                                               描述

application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 "+" 加号,但不对特殊字符编码。

这个取决于服务器。一些服务器需要,一些不需要。

asp.net/asp方便生成键值对,要不你只能读取2进制流获取数据,其他语言不了解。。
ajax指定为post但是未设置content-type

加请求头是为了告诉服务器请求体中的数据格式,这点从Content—type翻译可得,如果不设置请求头,服务器可能无法正常解析请求体中的数据