6

据我了解,由于当前浏览器中的“同源策略”强制执行,不可能从发送到与 Javascript 原始域不同的域的 XmlHttpRequest 获取数据。

我在这件事上的经验几乎为零,所以我对 Javascript 无法使用 Web 服务感到困惑。这是否意味着具有 Ajax 功能的 Web 应用程序只能与自己交互,而不能调用其他域提供的服务?“混搭”如何运作?我猜这些服务是在服务器端使用的,然后数据通过本地 Ajax 调用传递给客户端。我不知道。

我可以想象实现客户端使用服务的唯一方法是通过<script>标签直接从目标 Web 服务的域中检索 Javascript 文件,然后使用其 API 与远程域进行交互。

谁能启发我?

4

2 回答 2

6

在您的问题中,您提到了 <script> 技巧。JSONP 就是基于此。它是大约 3 年前由 Bob Ippolito 正式提出的。它没有让您有权谈论脚本的来源——来源是由您的网页定义的,而不是它包含的其他内容。它之所以起作用,只是因为服务器将 JSON 包装在一个回调函数中,该函数应该在您的代码中定义,并在加载时由 <script> 执行。JSONP 最著名的例子是 Yahoo 服务,包括 Flickr。

另一种技术是使用 window.name 来传输信息。四个月前,Kris Zyp 详细介绍了这项技术。此外,他的文章将 window.name 传输与 JSONP 进行了比较。我不知道有任何知名服务提供商支持这种新的传输方式。显然它会随着时间而改变。

当然,我应该提到即将推出的Microsoft XDomainRequest。它计划与 IE8 一起发布,并且没有其他供应商承诺支持它,但它被提出是为了包含在 HTML 5 中。XDR 是一个有用的功能,但我怀疑它会在发布之前进行多次更改公认。

如果您查看链接,您现在可能已经知道所有这些方法都需要来自 3rd 方服务器的一定程度的合作。您不能随意使用随机服务。如果您确实必须使用不合作的服务,唯一的解决方案是通过您自己的服务器代理它,但存在所有相关问题:合法性有问题、性能下降、服务器负载增加、用户浏览器和用户之间的连接数量减少你的服务器等等。

于 2008-11-28T00:56:06.070 回答
3

看看 JSONP,它使用几乎您所描述的方法围绕相同的来源策略工作,只要确保您相信您从哪里获得它......

于 2008-11-27T23:06:42.797 回答