我有这个jQuery脚本,它向PHP文件发送一个用户名密码,该文件检查该用户是否存在并返回一个JSON用户对象。在非IE浏览器中工作正常,但IE失败。
奇怪的是,IE“firebug”说一切都很好,但PHP脚本没有收到任何变种......
这是请求正文:
用户名= johanderowan&安培;口令= 1234
这些是请求标头(出于安全原因,我遗漏了几个变量):
Request = POST /1.0/account/login.json HTTP / 1.1
接受= /
Origin = [DEVURL]
Accept-Language = nl-NL
UA-CPU = AMD64
Accept-Encoding = gzip,deflate
User-Agent = Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident / 5.0)
主持人= [DEVURL]
内容长度= 66
连接保持活跃 缓存控制无缓存
响应正文是(前三个空数组是$ _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;
});
我完全不知道这里可能出现什么问题......
答案 0 :(得分:1)
IE似乎没有在跨域请求中发送正确的conent类型。内容类型始终设置为“text / plain”。
在此博文中了解有关此缺点的更多信息:http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
我们通过解析php://输入字符串并将其设置为$ _POST vars来修复此问题。
if ($_SERVER['REQUEST_METHOD'] == 'POST' && count($_POST) == 0) {
$postData = file_get_contents('php://input');
$postVars = explode('&', $postData);
foreach ($postVars as $postVar) {
list($key, $var) = explode('=', $postVar);
$_POST[$key] = $var;
}
}
答案 1 :(得分:0)
您是否尝试将缓存设置为false。我有一个类似的问题,这解决了它:
$.ajax({
type: 'POST',
url: '[url]/1.0/account/login.json',
dataType: 'json',
data: {
username: username,
password: password
},
cache: false,
success: function() {
// Do something
}
});
我希望这可以帮到你!
斯特芬
修改强>
问题也可能出在您的请求网址中。您试图调用.json文件。您可以尝试调用.php文件。
确保将其放在.php文件中:
header("Content-Type: application/json");