22

有没有办法将 XMLHttpRequest 与其他域结合使用?

我想从 Google 解析一些 xml 而不必使用服务器,因此运行起来非常复杂。

var req = getXmlHttpRequestObject();
...
req.open('GET', 'http://www.google.de/ig/api?weather=Braunschweig', true);
        req.setRequestHeader("Content-Type","text/xml");
        req.onreadystatechange = setMessage;
        req.send(null);

在服务器端做这件事是没有选择的,至少我不必问

4

7 回答 7

11

不,不是现在。我相信我读到计划/设计正在由标准组织为未来制定,因此我们可以安全地做到这一点。

否则,跨站点脚本漏洞将十分猖獗。

如果其他站点 API 支持,JSONP是一种可能的解决方案。

于 2008-11-27T21:52:14.927 回答
8

HTML5 现在支持 XmlHttpRequest 级别 2 的跨域请求,请查看:

http://www.html5rocks.com/en/tutorials/cors/

于 2013-04-10T07:44:22.403 回答
2

这是一个安全问题,大多数(全部?)浏览器不会让你这样做。您可以使用隐藏的 IFrame 进行提取,但它足够复杂,我只需使用服务器(或切换到不同的语言,如果我不必在浏览器中运行)

于 2008-11-27T21:54:01.833 回答
2

由于客户端(浏览器)的安全问题,您不能进行跨域请求,例如通过 XMLHttpRequest 或 jQuery(它是 XMLHttpRequest 的包装器)从 example1.com 到 example2.com。这在支持HTML5的现代浏览器中可以通过CORS(跨源资源共享)有效实现,并不是每个客户端浏览器都可以使用。所以解决方法是在example2.com的example1.com中插入script标签,这个解决方案是众所周知的作为 JSON-P(带填充的 JSON),名称可能会产生误导,因为数据可以是服务器提供的任何格式(example2.com)。其实现代码在此链接http://newtechinfo.net/jsonp中给​​出-for-cross-domain-ajax/

于 2015-11-13T12:29:49.973 回答
1

由于浏览器现在限制 XSS 攻击的 SOP(同源策略),这是不可能的。
您将不得不使用服务器端脚本(PHP 或其他东西)。

于 2008-11-27T21:54:47.760 回答
0

可以使用 HTML5 向另一个域发出 XHR。当使用 HTTP 与另一个网站通信时,您也可以使用 XHR 发出不同的协议请求。

于 2013-09-16T06:28:19.230 回答
-1

您可以尝试在服务器端做一些事情。因此,在您的应用程序中,您向远程站点发出请求,获取结果并将其返回给您的客户端。然后,AJAX 调用仅调用您自己的服务器并且可以正常工作。

于 2008-11-27T21:55:02.720 回答