Backbone.js 为什么我的主干网1.0.0无法仅从IE8中启用CORS的服务器跨域加载数据

Backbone.js 为什么我的主干网1.0.0无法仅从IE8中启用CORS的服务器跨域加载数据,backbone.js,internet-explorer-8,jsonp,cors,Backbone.js,Internet Explorer 8,Jsonp,Cors,我构建了一个主干1.0.0应用程序,该应用程序由以下域提供:beta.mydomain.com。此应用程序通过API.mydomain.com从仅JSON的API获取数据 因为这会导致浏览器跨域策略发挥作用,所以我完全为CORS请求打开了API服务器。每个请求的响应头包括: HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE 这对

我构建了一个主干1.0.0应用程序,该应用程序由以下域提供:
beta.mydomain.com
。此应用程序通过
API.mydomain.com
从仅JSON的API获取数据

因为这会导致浏览器跨域策略发挥作用,所以我完全为CORS请求打开了API服务器。每个请求的响应头包括:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE
这对于我目前测试的所有浏览器来说似乎都足够了。但它在IE8中失败,出现“传输错误”

下一步:JSONP。扩展sync并设置
options.dataType=“jsonp”
时,在所有浏览器中都会出现一个错误,该错误表示:

Uncaught SyntaxError: Unexpected token <
未捕获的语法错误:意外标记<
我不知道它从哪里来。有没有可能让CORS请求在IE8中工作,或者有没有任何方法“简单”启用JSONP,以便我的主干应用程序也在IE8中工作

拼命地。。。
Felix意外令牌Backbone.js在后台使用$.ajax,它本身使用XMLHttpRequest对象,IE8不支持跨域请求

因此,必须使用XDomainRequest对象,它与XMLHttpRequest非常相似,但用于IE和跨域请求

不过,我自己也遇到了这个问题,并编写了一个库,它是主干同步的替代品,它可以自动在后台处理所有XDomainRequest内容,因此您的其余代码无需更改即可使用IE7/8/9


只需在Backbone.js之后包含该库,IE上的CORS请求就可以神奇地工作。

Alex,thx提示一下,我的Rails驱动API与JSONP请求不符。它返回一些HTML错误页面。我说的对吗,JSONP是我在IE8中运行CORS请求的唯一机会?如果是的话,我就完蛋了。嗯,修正错误是可能的;rails在喊什么?参数解析失败。jQuery回调参数被分成两部分,因为它包含一个
=
。此外,或者作为结果,基于令牌的身份验证失败,因此请求被重定向到designe登录页面,这反过来解释了返回的HTML。我没有关于JSONP的经验,所以我不知道我的API必须对JSONP请求做出什么响应。因此,这一选择也被排除在竞争之外。似乎我唯一的选择是让API在与应用程序相同的域名下可用。对于IE8/9,您只能使用专有的
XDomainRequest
对象来执行CORS请求。这里有一些关于解决方法的建议:Thx WiredPairie。Quote:
XDomainRequest只提供XMLHTTPRequest功能的一个子集。例如,无法向HTTP Get/Post请求插入任何自定义头,
。。。使其成为死胡同,因为我通过HTTP头中传输的令牌进行身份验证。似乎唯一的选择是JSONP,或者从与API相同的子域交付应用程序。是的,这正是我所想的——JSONP只适用于GET,它可能对您的需求限制太大。