IE9 Jquery骨干提取不起作用

时间:2013-10-05 16:07:57

标签: jquery backbone.js internet-explorer-9 fetch jquery-deferred

我有一个功能齐全的骨干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中运行。如上所述,我们目前在我们的应用程序中有数百个提取,如果我必须重写这些提取,它将使我们显着回归。有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

  1. 打开IE9并导航至'设置 - &gt;互联网选项'
  2. 点击“安全”标签。选择“互联网”。
  3. 点击“自定义级别”。
  4. 找到名为“跨域访问数据源”的设置,然后选择启用。
  5. 点击没关系。刷新应用程序并尝试再次登录。
  6. 这在IE9中适用于我。在IE10及更高版本中,即使禁用该设置,呼叫仍会继续工作。我猜测它与通过主干同步进行的底层ajax调用有关,它在所有现代浏览器中使用XMLHTTPRequest,并且无法在IE9及更低版本中执行此操作。