如何在javascript中获取跨域请求的响应

时间:2011-05-14 15:05:31

标签: javascript dom request cross-domain dynamic-script-loading

我通过动态添加脚本并将其src属性设置为我需要请求的域来在javascript中创建跨域请求。 供参考:http://alvinabad.wordpress.com/2009/02/13/feb13/

脚本代码:

var script_id = null;
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', crossDomainURL);
script.setAttribute('id', 'script_id');

script_id = document.getElementById('script_id');
if (script_id) {
    document.getElementsByTagName('head')[0].removeChild(script_id);
}

现在,我需要解析此请求的响应。我已经检查过fiddler的原始响应。数据在那里,但它不在dom中。它是这样开始的:

<script type="text/javascript">
/* <![CDATA[ */
    if (top == self || parent != top || document.location.hostname != document.domain) 
    {  
        top.location.replace("http:\/\/www.facebook.com\/?gringotts_redir");}
/* ]]> */
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"**... then the rest

页面源显示我嵌入的javascript,如何解析从该代码生成的数据。

2 个答案:

答案 0 :(得分:1)

通常这样做的方法是让脚本响应包含对页面上已存在的函数的函数调用。但是,出于安全原因,浏览器不会让您的代码“看到”导入脚本的内容。然而,浏览器运行脚本,只要它是有效的JavaScript代码即可。在您的情况下,响应是有效的JavaScript代码。不能有<script>标记或任何HTML标记 - 它必须是纯JavaScript代码,就像使用<script>标记导入的任何其他文件的内容一样。

答案 1 :(得分:0)

您要求的内容称为JSONP或“带填充的JSON”。

请参阅:http://en.wikipedia.org/wiki/JSONP了解详情。