使用jQuery的getJson进行跨域追捕数据
出于对安全问题的考虑,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






