0

我构建了一个从域提供的 Backbone 1.0.0 应用程序:beta.mydomain.com. 此应用程序从仅 JSON 的 API 中获取数据,该 API 可通过api.mydomain.com.

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

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE

对于我迄今为止测试的所有浏览器来说,这似乎已经足够了。但它在 IE8 中失败并出现“传输错误”。

下一步:JSONP。当我扩展同步并设置时,options.dataType = "jsonp"我在所有浏览器中都收到错误消息:

Uncaught SyntaxError: Unexpected token <

我不知道在哪里,它来自哪里。有没有机会让 CORS 请求在 IE8 中工作,或者有什么方法可以“简单地”启用 JSONP,以便我的 Backbone 应用程序也可以在 IE8 中工作?

拼命地……菲利克斯

4

2 回答 2

0

Unexpected token <通常表示 HTML 在您不期望的地方返回。在这种情况下通常会出现错误页面,因为 JSONP 需要一个小的脚本有效负载来执行/评估。

您可以在 Chrome 开发工具或 Firebug 的网络选项卡中检查 HTTP 响应的内容。如果您有权访问返回(或不返回)您的 JSON 或 HTML 的服务器,您还可以查看服务器日志。

于 2013-04-17T16:53:11.590 回答
0

Backbone.js 在后台使用 $.ajax,它本身使用 IE8 不支持跨域请求的 XMLHttpRequest 对象。

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

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

https://github.com/victorquinn/Backbone.CrossDomain

只需在 Backbone.js 之后包含该库,您在 IE 上的 CORS 请求就会神奇地起作用。

于 2013-05-16T17:02:28.833 回答