Ember.js IE9:store.find失败

Ember.js IE9:store.find失败,ember.js,ember-data,Ember.js,Ember Data,我似乎无法在Internet Explorer 9中获取新数据。出于示例的目的,我通过以下方式测试存储: App.\uuuu容器\uuuu.lookup('store:main')。find('style') 我收到的唯一错误如下: SCRIPT5022:错误:断言失败:[对象] 在InternetExplorer9中,余烬数据是否可以开箱即用(无多边形填充…) 版本: 余烬:1.9.1 余烬数据:1.0.0-beta.12 余烬数据与IE8+一起开箱即用。根据: 我们用我们的平台(构建在Em

我似乎无法在Internet Explorer 9中获取新数据。出于示例的目的,我通过以下方式测试存储:

App.\uuuu容器\uuuu.lookup('store:main')。find('style')

我收到的唯一错误如下:

SCRIPT5022:错误:断言失败:[对象]

在InternetExplorer9中,余烬数据是否可以开箱即用(无多边形填充…)

版本:

  • 余烬:1.9.1
  • 余烬数据:1.0.0-beta.12

余烬数据与IE8+一起开箱即用。根据:

我们用我们的平台(构建在Ember上)支持IE8已有一段时间了 而现在。我知道的事情:

  • 不需要垫片/假垫片,它由余烬和余烬数据填充
  • 如果您想要在函数上添加诸如.bind()之类的附加内容,则必须将其预先添加到供应商文件中(使用Brocfile) 我们只包括用于该目的的垫片,而不是假垫片

问题解决了。使用jQuery执行AJAX请求时,通常通过XMLHttpRequest对象执行

在IE8-9上,此对象不存在,而是使用XDomainRequest。最简单的解决方法是添加:。

溶液合成 原因:

在IE8-9上,此对象不存在,而是使用XDomainRequest

解决方案:

问题解决了。在jQuery中使用AJAX请求时。通常,这是通过XMLHttpRequest对象完成的。一个简单的修复方法是使用开源

代码:添加:

jQuery-ajaxTransport-XDomainRequest.js

/*!
 * jQuery-ajaxTransport-XDomainRequest - v1.0.4 - 2015-03-05
 * https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
 * Copyright (c) 2015 Jason Moon (@JSONMOON)
 * Licensed MIT (/blob/master/LICENSE.txt)
 */
(function(factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as anonymous module.
    define(['jquery'], factory);
  } else if (typeof exports === 'object') {
    // CommonJS
    module.exports = factory(require('jquery'));
  } else {
    // Browser globals.
    factory(jQuery);
  }
}(function($) {

// Only continue if we're on IE8/IE9 with jQuery 1.5+ (contains the ajaxTransport function)
if ($.support.cors || !$.ajaxTransport || !window.XDomainRequest) {
  return $;
}

var httpRegEx = /^(https?:)?\/\//i;
var getOrPostRegEx = /^get|post$/i;
var sameSchemeRegEx = new RegExp('^(\/\/|' + location.protocol + ')', 'i');

// ajaxTransport exists in jQuery 1.5+
$.ajaxTransport('* text html xml json', function(options, userOptions, jqXHR) {

  // Only continue if the request is: asynchronous, uses GET or POST method, has HTTP or HTTPS protocol, and has the same scheme as the calling page
  if (!options.crossDomain || !options.async || !getOrPostRegEx.test(options.type) || !httpRegEx.test(options.url) || !sameSchemeRegEx.test(options.url)) {
    return;
  }

  var xdr = null;

  return {
    send: function(headers, complete) {
      var postData = '';
      var userType = (userOptions.dataType || '').toLowerCase();

      xdr = new XDomainRequest();
      if (/^\d+$/.test(userOptions.timeout)) {
        xdr.timeout = userOptions.timeout;
      }

      xdr.ontimeout = function() {
        complete(500, 'timeout');
      };

      xdr.onload = function() {
        var allResponseHeaders = 'Content-Length: ' + xdr.responseText.length + '\r\nContent-Type: ' + xdr.contentType;
        var status = {
          code: 200,
          message: 'success'
        };
        var responses = {
          text: xdr.responseText
        };
        try {
          if (userType === 'html' || /text\/html/i.test(xdr.contentType)) {
            responses.html = xdr.responseText;
          } else if (userType === 'json' || (userType !== 'text' && /\/json/i.test(xdr.contentType))) {
            try {
              responses.json = $.parseJSON(xdr.responseText);
            } catch(e) {
              status.code = 500;
              status.message = 'parseerror';
              //throw 'Invalid JSON: ' + xdr.responseText;
            }
          } else if (userType === 'xml' || (userType !== 'text' && /\/xml/i.test(xdr.contentType))) {
            var doc = new ActiveXObject('Microsoft.XMLDOM');
            doc.async = false;
            try {
              doc.loadXML(xdr.responseText);
            } catch(e) {
              doc = undefined;
            }
            if (!doc || !doc.documentElement || doc.getElementsByTagName('parsererror').length) {
              status.code = 500;
              status.message = 'parseerror';
              throw 'Invalid XML: ' + xdr.responseText;
            }
            responses.xml = doc;
          }
        } catch(parseMessage) {
          throw parseMessage;
        } finally {
          complete(status.code, status.message, responses, allResponseHeaders);
        }
      };

      // set an empty handler for 'onprogress' so requests don't get aborted
      xdr.onprogress = function(){};
      xdr.onerror = function() {
        complete(500, 'error', {
          text: xdr.responseText
        });
      };

      if (userOptions.data) {
        postData = ($.type(userOptions.data) === 'string') ? userOptions.data : $.param(userOptions.data);
      }
      xdr.open(options.type, options.url);
      xdr.send(postData);
    },
    abort: function() {
      if (xdr) {
        xdr.abort();
      }
    }
  };
});

return $;

}));

我的猜测是,你需要一个简单的ES5垫片,但有一点更多的信息,这是很难确定的(而且ED现在已经达到beta 16+了,我想这可能值得一看)。如果你在IE9的开发工具中发现了错误-你能得到一行或合法的stacktrace来确定余烬数据中的真实问题吗?这是InternetExplorer9的一大优点,它只向我显示了一个错误图标,但没有消息或可能看到stacktrace。这就是为什么我想知道余烬数据需要一些特定的垫片或多边形填充才能在Internet Explorer中工作。我还尝试添加了一个ES5垫片,但这并没有产生任何影响。您是否遇到了相同的错误w/IE8或否?我发现使用virtualbox和IE8我可以看到行#(在开发模式下),然后我可以在本地(在我的开发机器上)使用chrome请求相同的文件,并调出vendor.js或任何js文件来查看死亡的代码行。这是一个选项/您可以获得的任何其他信息吗?