使用jQuery的跨站点AJAX

时间:2009-07-29 02:38:44

标签: javascript jquery ajax cross-site

我有一个现有的jQuery插件,可以进行大量的AJAX调用(主要是JSON)。我想知道什么是允许它进行跨站点调用最快,即$ .get和$ .post URL不会来自同一个域。

我听说过JSONP,但是想知道是否有人可以给我一个具体的例子来讲述整个过程。我希望尽可能对我的脚本进行微小的更改。我应该使用各种proxy.php吗?

感谢您的时间。

3 个答案:

答案 0 :(得分:13)

JSONP将允许您进行跨站点呼叫。 See jQuery docs on that matter.

概念很简单:jQuery不会执行普通的Ajax调用,而是会向<script>添加<head>标记。为了使其工作,您的JSON数据需要包装在一个 功能调用。

您的服务器需要以这种方式发送信息(PHP示例):

$json = json_encode($data);
echo $_GET['jsonp_callback'] . '(' . $json . ');';

然后,您可以使用jQuery获取该信息:

$.ajax({
  dataType: 'jsonp',
  jsonp: 'jsonp_callback',
  url: 'http://myotherserver.com/getdata',
  success: function () {
    // do stuff
  },
});

此处提供了更多信息:What is JSONP?

答案 1 :(得分:2)

如果您可以控制远程域,或者远程域具有宽松crossdomain.xml,则可以将flXHR等库与其jQuery plugin一起放入。

答案 2 :(得分:1)

您也可以使用CORS代替JSONP,适用于ff,chrome,safari。 CORS设置起来不那么麻烦,只需要服务器端的过滤器。

请仔细阅读这篇文章。说明并且类似。 只有约束是IE不支持这个和旧版本的FF,chrome也有一些问题。

http://techblog.constantcontact.com/software-development/using-cors-for-cross-domain-ajax-requests/