我有一个功能齐全的骨干js应用程序。在我的控制器中,我通过链接的when.apply函数调用从api中检索我的模型。例如,
$.when.apply($, [<<array of deferred async calls>>]).done(function () {
<<Code to be executed after all deferred calls complete>>
});
此代码一直在最新的firefox,chrome和IE10浏览器中使用,但在IE9中却没有。 IE9没有抛出任何错误,但我看不到在网络选项卡中加载模型数据的调用。因此,在调用完成后要执行的代码也不会被命中。
在搜索此问题时,我遇到了这篇文章。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply 帖子说,
注意:大多数浏览器(包括Chrome 14和Internet Explorer 9)仍然不接受类似数组的对象,并会抛出异常。
有没有办法解决这个问题而不需要对我现有的代码进行大修,这很多?
编辑:在下面的@ Beetroot评论之后,似乎主干的抓取是责备,这是在when.apply中使用的。 r = { method: 'get', body: { userId: loggedInUser } };
$.when.apply($, [employee.fetch(r), department.fetch(r)]).done(function () {
<<Code to be executed after all deferred calls complete>>
});
同样,在研究这个问题时,SO中的帖子如Backbone fetch() fails for IE,建议更改获取功能以使其在IE9中运行。如上所述,我们目前在我们的应用程序中有数百个提取,如果我必须重写这些提取,它将使我们显着回归。有没有其他方法可以解决这个问题?
答案 0 :(得分:1)
我终于在MS支持中与某人交谈了,他们在IE 9中给了我这个解决方法。
这在IE9中适用于我。在IE10及更高版本中,即使禁用该设置,呼叫仍会继续工作。我猜测它与通过主干同步进行的底层ajax调用有关,它在所有现代浏览器中使用XMLHTTPRequest,并且无法在IE9及更低版本中执行此操作。