为什么IE和Ajax有这么多问题?

时间:2010-12-01 11:38:16

标签: jquery ajax internet-explorer

$.ajax({
  type: 'POST',
  url: URL +'/foo/',
  data: {'pass': pass},
  dataType: "json",
  jsonp:'jsonp_callback',
  success: function(data) {
    if (data["success"] === "false") {
      $("#password").val("");
      $('.error-message').removeClass('hide')
      $('.error-message').addClass('show')
    }
    else {
      var tempUrl="http://10.0.1.101:9000/bar/"
      location.href=tempUrl;
    }
  },
});
return false

这在Mozilla,Chrome,Safari中运行良好。但不是在IE中。可能是什么原因。我从服务器返回suucess值。如果成功为True,则会重定向到tempUrl。 但在IE中没有任何东西在这里讨厌。似乎ajax根本不在IE中工作。

2 个答案:

答案 0 :(得分:4)

您遇到了“悬空逗号”问题(}参数关闭success后的逗号)。 IE不喜欢对象文字中的悬空逗号,它将它们视为语法错误而脚本会死掉。 (这不是IE的错误,它是对早期规范的合理解释;最新的规范特别允许使用逗号,这在IE8中得到修复。)偏离主题:IE有类似但不同的,问题是数组文字中的悬空逗号(仍然在IE8中)。

更多关于两个问题this article,但基本上是:

$.ajax({
  type: 'POST',
  url: URL +'/foo/',
  data: {'pass': pass},
  dataType: "json",
  jsonp:'jsonp_callback',
  success: function(data) {
    if (data["success"] === "false") {
      $("#password").val("");
      $('.error-message').removeClass('hide')   // <== Strongly recommend ; here
      $('.error-message').addClass('show')      // <== Another ; here
    }
    else {
      var tempUrl="http://10.0.1.101:9000/bar/" // <== Another ; here
      location.href=tempUrl;
    }
  }, // <== This comma is the problem
});
return false                                    // <== Another ; here

请参阅底部附近的注释。删除逗号,你没事。事情正在改善(如上面的链接文章中所述),但为了最大程度地兼容,你需要观看一段时间。

(其他说明偏离主题,但同样强烈建议修复这些,从不依赖分号插入。)

答案 1 :(得分:0)

您应该在这些行的末尾添加分号:

$('.error-message').removeClass('hide')
$('.error-message').addClass('show')
var tempUrl="http://10.0.1.101:9000/bar/"