gpt4 book ai didi

ajax - IE9中与SproutCore的跨源请求

转载 作者:行者123 更新时间:2023-12-03 13:38:03 24 4
gpt4 key购买 nike

我正在尝试基于SproutCore 1.8构建一个Web应用程序。为了从服务器检索数据,该应用向在单独域上运行的REST Web服务发出CORS请求。

用于此的代码如下所示:

var request = SC.Request.getUrl('http://example.com/some/path');
request.set('attachIdentifyingHeaders', NO);
request.json().notify(this, this.didFetchData).send();

这在Chrome,Safari和Firefox中效果很好,但在Internet Explorer 9中却不起作用。实际上,IE9在SproutCore的内部请求实现中遇到JavaScript错误“访问被拒绝”。在此行引发错误:
// initiate request.
rawRequest.open(this.get('type'), this.get('address'), async);

经过短暂的调查,我发现Microsoft在IE9中为CORS请求实现了专用的XDomainRequest对象。从以下几行推断(SproutCore native 请求实现选择),SproutCore似乎不支持此功能:
return tryThese(
function() { return new XMLHttpRequest(); },
function() { return new ActiveXObject('Msxml2.XMLHTTP'); },
function() { return new ActiveXObject('Microsoft.XMLHTTP'); }
);

这是SproutCore的缺点还是我缺少什么?如果是这样,您是否对如何解决该问题而不提出自己的请求抽象有任何建议?

请注意,CORS是我正在使用的现有服务器基础结构的要求。我既不能将服务与提供客户端的服务器放在同一个域中,也不能使用反向代理或类似的基础架构解决问题。

最佳答案

你有两个选择

1)Hack Sproutcore本身。您可以尝试添加
function() {return new XDomainRequest(); }
到xhr差额运输 list 。首先添加;如果在浏览器上可用,则将使用它,否则代码将退回到其他对象。

2)如果您不想修改SC源,则可以创建扩展App.CorsResponse的自己的SC.XHRResponse类。在您的实现中,提供您自己的createRequest方法并执行我在1)中所说的。每当您创建请求时,都将responseClass指定为您的自定义实现。

关于ajax - IE9中与SproutCore的跨源请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com