【发布时间】:2012-05-30 02:08:11
【问题描述】:
我有这个 jQuery 脚本,它将用户名和密码发送到 PHP 文件,该文件检查该用户是否存在并返回 JSON 用户对象。在非 IE 浏览器中运行良好,但 IE 失败。
奇怪的是,IE“萤火虫”说一切都很好,但 PHP 脚本没有收到任何变量...
这是请求正文:
用户名=johanderowan&密码=1234
这些是请求标头(出于安全原因,我省略了一些变量):
请求 = POST /1.0/account/login.json HTTP/1.1
接受 = /
来源 = [DEVURL]
接受语言 = nl-NL
UA-CPU = AMD64
接受编码 = gzip、放气
用户代理 = Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;Win64;x64;Trident/5.0)
主机 = [DEVURL]
内容长度 = 66
连接保活 Cache-Control no-cache
响应正文是(前三个空数组是 $_GET、$_POST 和 $_REQUEST):
数组 ( )
大批 ( )
大批 ( )
{"status":"error","message":"未指定用户名或密码。","httpCode":500}
这是请求脚本:
$('.mobyNowLoginForm form').bind('submit', function(){
var username = $(this).find('.username').val();
var password = $(this).find('.password').val();
$.post('[url]/1.0/account/login.json', {
username: username,
password: password
}, function(response) {
// do something
}, "JSON");
return false;
});
我完全不知道这里有什么问题......
【问题讨论】:
-
你是如何得到 HTTP 响应头和正文的?
-
var_dump(file_get_contents("php://input"));向您展示了什么?请求标头中的Content-Type是什么? -
可以肯定的是,请求标头错过了
Content-Type: application/x-www-form-urlencoded。也许这就是 PHP 没有将请求正文填充到$_POST的原因。 -
FWIW,我可以让 jQuery 省略
Content-Type标头而不发送 any POST 变量的唯一方法是data参数是否丢失或包含属性都是undefined(这并没有解释你如何看到请求正文被填充,但解释了其他所有内容)。尝试alertingusername/password的值。 -
这更像是一个问题:你发布到 login.json,而不是 login.php