0

我有一个功能齐全的主干 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() failed for IE,建议更改 fetch 函数以使其在 IE9 中工作。如上所述,我们的应用程序目前有数百个 fetches,如果我必须重写这些 fetches,它会让我们大吃一惊。有没有其他方法可以解决这个问题?

4

1 回答 1

1

我终于与 MS 支持人员交谈,他们在 IE 9 中给了我这个解决方法。

  1. 打开 IE9 并导航到“设置 -> Internet 选项”</li>
  2. 单击“安全”选项卡。选择“互联网”。
  3. 单击“自定义级别”。
  4. 找到一个名为“跨域访问数据源”的设置,然后选择启用。
  5. 点击确定。刷新应用程序并尝试再次登录。

这适用于我现在在 IE9 中。在 IE10 及更高版本中,即使该设置被禁用,调用也会继续工作。我猜它与通过骨干同步进行的底层 ajax 调用有关,它在所有现代浏览器中都使用 XMLHTTPRequest,而在 IE9 及更低版本中无法做到这一点。

于 2013-11-11T08:41:06.473 回答