Ajax发布失败的IE

时间:2011-12-06 19:55:35

标签: internet-explorer jquery

我用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

3 个答案:

答案 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"没关系,例如。

希望这会有所帮助。欢呼声。