我用jQuery调用ajax.php
。它始终返回JSON响应。
$.ajax({
type: 'POST',
url: 'ajax.php',
data: 'some=info',
dataType: 'json',
success: function(data) {
if(data != null) {
console.log(data);
} else {
alert('IE fails here!');
}
}
});
Ajax总是以JSON格式返回一些数据。它适用于除IE以外的所有浏览器(在IE 7,8和9上测试)。在IE中,它始终打印警报(这意味着它永远不会收到响应信息)。有什么想法吗?
更新1 :我刚刚确认该帖子在IE中永远不会成功,这就是数据始终为空的原因。
更新2 :帖子到达,但只有在IE时才返回null。
更新3(解决方案):我的错,ajax正在防止来自其他服务器的呼叫。它在开头使用if()语句,要求$ _SERVER ['HTTP_REFERER']的主机是同一服务器的主机。现在问题是,为什么IE不能识别ajax调用中的$ _SERVER ['HTTP_REFERER'] ?
这是api代码(php)
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$security = parse_url($_SERVER['HTTP_REFERER']);
if(in_array($security['host'],array('localhost','tradukka.com','173.203.198.123'))) {
header('Content-type: application/json');
$array = array('nice','data','for','api');
echo json_encode($translation);
}
}
}
IE在$ _SERVER ['HTTP_REFERER']检查时失败:s
答案 0 :(得分:1)
ajax正在防止来自其他服务器的呼叫。它在开头使用if()语句,要求$ _SERVER ['HTTP_REFERER']的主机是同一服务器的主机。我在IE上测试的机器没有获得主机的名字;相反,它有ip值,这就是它总是丢错的原因。
答案 1 :(得分:0)
IE因缓存ajax请求而臭名昭着。尝试将参数'cache:false'添加到您的请求中:
$.ajax({
type: 'POST',
cache: false,
url: 'ajax.php',
data: 'some=info',
dataType: 'json',
success: function(data) {
if(data != null) {
console.log(data);
} else {
alert('IE fails here!');
}
}
});
编辑您确认没有抛出javascript错误吗?也许,抛出然后用try / catch捕获,所以可能无法从浏览器中看到它?
答案 2 :(得分:0)
尝试在dataType之前添加此项:' json'。
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
所以看起来应该是这样的:
$.ajax({
type: 'POST',
url: 'ajax.php',
data: 'some=info',
beforeSend: function(x) {
if(x && x.overrideMimeType) {
x.overrideMimeType("application/j-son;charset=UTF-8");
}
},
dataType: 'json',
success: function(data) {
if(data != null) {
console.log(data);
} else {
alert('IE fails here!');
}
}
});
您的服务器需要以Content-Type" * / json" - 如果此代码不起作用,请相应地修改响应标头。发送" application / json"没关系,例如。
希望这会有所帮助。欢呼声。