$.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中。可能是什么原因。我从服务器返回成功值。如果成功为True,它将重定向到tempUrl
但是,IE中没有任何东西在这里。看来ajax在IE中根本不起作用。

最佳答案

您遇到了“悬挂逗号”问题(}参数的success结束后的逗号)。 IE不喜欢在对象字面量中使用逗号,而是将其视为语法错误并将脚本终止。 (这不是IE错误,这是对早期规范的合理解释;不过,最新规范专门允许使用逗号,并且该问题已在IE8中修复。)离题:IE的问题与之相似,但有所不同数组文字中的悬挂逗号(仍在IE8中)。

关于这两个isuses 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


请参阅底部附近的注释。删除逗号就可以了。情况正在改善(如上面的链接文章中所述),但是为了在野外获得最大的兼容性,您需要等待一会儿。

(其他说明离题,但同样,强烈建议您也修复这些问题,切勿依赖分号插入。)

关于jquery - 为什么IE和Ajax有这么多问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4323921/

10-14 12:33
查看更多