« JSONP让javascript实现跨域请求未成年人沉迷网游 家长可举报帐号 »

使用jQuery的getJson进行跨域追捕数据

ckqee | 2010-02-06 18:16 | 字体:

出于对安全问题的考虑,Ajax应用中,浏览器默认是不支持跨域调用的。不过很幸运,从jQuery 1.2以后,就开始支持JSONP的调用,使ajax跨域获取数据变得更加容易

这是昨晚加班的时候遇到一个问题,服务器A(域名aa.domian.com)上放置了所有游戏广告页和引导页,一般这样的页面是不需要连接数据库的,因此该服务器上并未配置数据库连接的环境。不过我的工作是在这里创建一个页面并且要显示游戏官方网站(处于域gg.domain.com)上的一些数据,仅仅是请求一个不长的字符串而已,我想到用ajax来解决,很快我就遇到了IE浏览器提示的javascript错误“没有权限”(oh!进行了跨域请求)。后来我使用jquery很快地把这跨域的数据追捕到了,听起来有点像是在为jq做广告。


使用示例:
    var url = "http://www.###.com/test.php?name=a";
    jQuery.getJSON(url +"&jsoncallback=?", function(data){
        alert("return msg:" + data.msg);
    });

在服务端程序:
    $visitor = $_GET['name'];
    $callback = $_GET['jsoncallback'];
    $msg = 'hello ' . $_GET['name'] . ', this is server B!';
    //服务端返回
    $json_data = '{"msg":"' . $msg . '"}";
    echo $callback . '(' . $json_data . ')';

这样,在客户端得到的返回程序可能是:
    JQUET0988788({"msg":"hello a, this is server B!"})

总之,我们要做的是两件事:
    1. 在请求地址里加上参数 jsoncallback=?
    2. 在服务端程序里把jsoncallback的值和数据一起返回,形如 $callback . '(' . $json_data . ')'

至此,问题解决了。


转载请注明:天空巴士 - www.sky84.cn
本文链接地址:http://www.sky84.cn/index.php/article_content_id,150.html
发表评论
gavatar