首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AJAX跨域调用

AJAX跨域调用
EN

Stack Overflow用户
提问于 2010-04-01 16:06:04
回答 10查看 141.7K关注 0票数 66

我知道AJAX跨域策略。因此,我不能简单地通过ajax HTTP请求调用"http://www.google.com“并在我的站点上的某个地方显示结果。

我用dataType“JSON it”尝试了一下,这实际上是可行的,但是我得到了一个语法错误(显然是因为收到的数据不是JSON格式的)。

是否存在从外部域接收/显示数据的其他可能性?iFrames是否遵循相同的策略?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-04-01 16:29:33

使用AJAX获取跨域数据的唯一(简单)方法是使用服务器端语言作为代理,正如Andy E所指出的那样。下面是一个小示例,说明如何使用jQuery实现该功能:

jQuery部分:

代码语言:javascript
复制
$.ajax({
    url: 'proxy.php',
    type: 'POST',
    data: {
        address: 'http://www.google.com'
    },
    success: function(response) {
        // response now contains full HTML of google.com
    }
});

和PHP (proxy.php):

代码语言:javascript
复制
echo file_get_contents($_POST['address']);

就这么简单。只需意识到您可以或不能对抓取的数据执行哪些操作。

票数 67
EN

Stack Overflow用户

发布于 2010-04-01 16:14:50

您将需要在引用数据的页面中动态插入脚本标记。使用JSONP,您可以在加载脚本时执行一些回调函数。

JSONP上的维基百科页面有一个简明的示例;脚本标记:

代码语言:javascript
复制
<script type="text/javascript" src="http://domain1.com/getjson?jsonp=parseResponse">
</script>

将返回包装在parseResponse调用中的JSON数据。

代码语言:javascript
复制
parseResponse({"Name": "Cheeso", "Rank": 7})

(取决于domain1.com上getjson脚本的配置)

动态插入标记的代码如下所示:

代码语言:javascript
复制
var s = document.createElement("script");
s.src = "http://domain1.com/getjson?jsonp=parseResponse";
s.type = "text/javascript";
document.appendChild(s);
票数 19
EN

Stack Overflow用户

发布于 2011-09-10 11:58:39

您可以使用YQL来执行请求,而无需托管您自己的代理。我创建了一个简单的函数来简化命令的运行:

代码语言:javascript
复制
function RunYQL(command, callback){
     callback_name = "__YQL_callback_"+(new Date()).getTime();
     window[callback_name] = callback;
     a = document.createElement('script');
     a.src = "http://query.yahooapis.com/v1/public/yql?q="
             +escape(command)+"&format=json&callback="+callback_name;
     a.type = "text/javascript";
     document.getElementsByTagName("head")[0].appendChild(a);
}

如果你有jQuery,你可以改用$.getJSON。

示例可能如下所示:

代码语言:javascript
复制
RunYQL('select * from html where url="http://www.google.com/"',
       function(data){/* actions */}
);
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2558977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档