通过使用 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
答案 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);
}
您有几个选择:
let
解决方案。let
,但在圈内这是#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
在循环中的确切语义被移动了在规范过程中,可能只是因为微软跳出了枪并实施了他们认为基于当前对话的内容,只是在最终规范出来之前进行了更改。这是在规范过程中过早实施的危险。 (在此期间,这个过程本身已经更加正式化,以帮助供应商避免这类事情。)