我的AJAX脚本之前没有工作(它不会发送数据),但设置请求标头可以解决问题。它的功能很棒,但我想了解为什么需要它才能工作。谢谢: - )
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
javascript
function request(elm, type, url, str, fn) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange=function()
{
if (xhr.readyState==4 && xhr.status==200)
{
if (!fn) elm.innerHTML=xhr.responseText;
else fn(xhr);
}
}
xhr.open(type, url, true);
//yay it works with this :-)
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(str);
}
var form = document.getElementById("form_login")
var btnLogin = form.getElementsByClassName("btn")[0];
addEvent(btnLogin, "click", function(e)
{
preventDefault(e);
var post ="",input,inputs = form.getElementsByClassName("input");
for (var i=0, l=inputs.length; i<l; i++)
{
input = inputs[i].getElementsByTagName("input")[0];
post += input.name + "=" + encodeURI(input.value) + "&";
}
post = post.substr(0,post.length-1);
var help = form.getElementsByClassName("help")[0];
request(help, "POST", "user/login-exe.php?dt='" + new Date() + "'", post);
});
如果它全部有效则会记录该位中的用户,但不会显示。
答案 0 :(得分:3)
这不是严格要求,当请求指定$_POST
的内容类型时,PHP将自动填充"application/x-www-form-urlencoded"
。
您仍然可以使用
访问这些值file_get_contents("php://input");
事实上,任何服务器都应该允许您访问原始请求正文。
其他标题没有做任何事情,浏览器不允许您按照指定更改它们。如果您能够更改它们,您可能每次报告错误的Content-Length
。因为.length
计算UTF-16代码单元,其中Content-Length
必须以字节为单位。
参考:http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method
如果header是一个不区分大小写的匹配项,则终止这些步骤 以下标题:
- 接收字符集
- 接受编码
- 访问控制请求报头
- 访问控制请求-方法
- 的连接强>
- 内容 - 长度强>
- 曲奇
- COOKIE2
- 内容传输编码
- 日期
- 期望
- 主机
- 保持活动
- 来源
- Referer的
- TE
- 拖车
- 传送编码
- 升级
- 的User-Agent
- 经
答案 1 :(得分:0)
1。)&#34;内容类型&#34; <form>
的标头:指定在将表单数据提交到服务器时对表单数据集进行编码的content-type
。
application / x-www-form-urlencoded:表示将表单的数据编码为 a。)控件名称和值按它们出现的顺序列出;控制名称由&#39; =&#39;分隔出来。控件名称和值由&#39;&amp;&#39;分隔。 b)控制名称和值被转义。空格字符替换为&#39; +&#39;和RFC1738中描述的其他保留字符进行转义。
2)&#34;内容长度&#34; :此标头以十进制八位字节表示邮件正文的大小 - What's the "Content-Length" field in HTTP header?
3)连接:连接状态。
我不这么认为设置&#34; Connection&#34;是required。