这里发布了三个解决方案:
http://devlog.info/2010/03/10/cross-domain-ajax/
我尝试了第三个选项,因为它对我有用..而且我不必承受任何额外的压力,因为它就像处理常规 ajax 调用一样处理事情。
更新答案,因为这是 2 年前发布的:
上面的链接不再有效。
服务器端代理:
旧页面还谈到了使用服务器端代理,这意味着您的服务器调用另一台服务器,获取所有数据并将其发送到基于该服务器的页面。一台服务器从另一台服务器获取数据没有问题。因此,您的页面可以对该服务器进行常规 ajax 调用。我没有选择这个选项,因为它需要更多的体力劳动。所以我建议使用此处详述的选项:
带有 jQuery 的 JSONP
- 确保提供程序支持 JSONP。
- 将 dataType 选项设置为 jsonp,如果提供者使用除“回调”之外的其他 GET 参数,请为该参数名称指定 jsonp 选项。
$.ajax({
// ... Use the AJAX utility as you normally would
dataType: 'jsonp',
// ...
});
jQuery 将为这个请求生成一个唯一的回调名称(类似于 json1268267816)。因此,来自 Web 服务的回复将类似于:
json1268267816({'uid': 23, 'username': 'Chroder', 'name': 'Christopher Nadeau'});
但是 jQuery 可以无缝地处理这一切,因此您作为开发人员只需使用相同的 jQuery 成功/失败/完成回调钩子像普通的 AJAX 请求一样处理它。
缺点:
此方法的第一个限制是您必须依赖提供者来实现 JSONP。提供者需要实际支持 JSONP——他们需要用回调函数名称包装他们的 JSON 数据。
然后下一个限制——这是一个很大的限制——是 JSONP 不支持 POST 请求。由于所有数据都作为 GET 数据在查询字符串中传递,因此如果您的服务需要传递长数据(例如,论坛帖子或评论或文章),您将受到严重限制。但对于大多数获取的数据多于推送的数据的消费者服务来说,这并不是什么大问题。
然而,
使用像 jQuery 这样支持 JSONP 的库,插入特殊脚本标签和创建特殊回调函数的这些细节都是自动处理的。使用 JS 库,JSONP 和真正的 AJAX 之间的唯一区别通常是您启用了“jsonp”选项。