$ .getjson IE特定错误

时间:2017-02-17 10:48:42

标签: javascript jquery ajax internet-explorer getjson

通过使用 for-loop 向服务器询问几个数据库条目,我编写了一段代码,该代码正常工作,但是

奇怪的是,这段代码不适用于 IE11 。 对于谷歌浏览器,Firefox,Safari ,......,它的工作原理很好。但不幸的是我需要使用IE11。代码没有出错,但是从服务器返回的数据不存在。只是for-loop中的最后一个元素被传输了。

通过使用IE网络连接表示工具,可以看到所有请求都被发回,但不知何故只是最后一个请求已经存在。 Mabye有人已经有这个问题,可以给我一些提示......

<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.sample.com/test_request" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.sample.com/test_request" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
      <wsdl:types>
        <xsd:schema e

函数 dataReady ,应该处理收到的数据,但不知何故使用IE11,只有来自循环的最后一个请求就在那里!因此我决定开一个新的问题。也许有一个天才可以给我一些提示...... Lucene Date Api

enter image description here

1 个答案:

答案 0 :(得分:5)

这是IE11与规范的不兼容。 1 不幸的是,let循环中的for在IE9-IE11中被错误地实现(并且Edge直到并包括Edge 13 ; Edge 14最终使它正确)。在与ES2015(又名“ES6”)规范兼容的浏览器中,此代码应显示1,2,3,4,5;但是在IE11上,它显示了6,6,6,6,6(就像我们使用var一样)。

for (let i = 1; i <= 5; ++i) {
  setTimeout(function() {
    console.log(i);
  }, 0);
}

enter image description here

您有几个选择:

  1. 使用dealing with closures in loops的其他解决方案之一代替let解决方案。
  2. 使用let,但圈内
  3. 这是#2,它在IE11上正常工作:

    for (let i = 1; i <= 5; ++i) {
      let inner = i; // Different variable
      setTimeout(function() {
        console.log(inner);
      }, 0);
    }

    1 最初我把它称为“bug”,但值得注意的是IE11是在最终的ES2015规范发布前两年发布的,而且let在循环中的确切语义被移动了在规范过程中,可能只是因为微软跳出了枪并实施了他们认为基于当前对话的内容,只是在最终规范出来之前进行了更改。这是在规范过程中过早实施的危险。 (在此期间,这个过程本身已经更加正式化,以帮助供应商避免这类事情。)

相关问题