昨天在开发一个腾讯微博API的时候,遇到jQuery.getJSON跨域名远程访问json数据源的时候,报“拒绝访问”的脚本错误。
修改前:
修改后:
URL后面多了:?jsoncallback=?
当然,jsoncallback可以改为其它你想要的名字,然后在服务端(本例指gethtlist.jsp)应该获取这个参数,并且封装一下json数据。
修改前只是一个json数据对象:
{"data":{id:1,title:’javawind’},msg:"ok",ret:0}
那么我们应该修改成:
jsoncallback({"data":{id:1,title:’javawind’},msg:"ok",ret:0})
其中jsoncallback是获取的jsoncallback的参数,这里是jsp,所以应该是:
<%=request.getParameter("jsoncallback")%>({"data":{id:1,title:’javawind’},msg:"ok",ret:0})
jsoncallback=? 表示参数由jQuery自动生成,最终它会生成一个jsonp1294882912998这样格式(jsonp+时间戳)的参数,你也可以指定jsoncallback=xxxyyy参数给他,服务器端就可以不用动态获取了。
我简单做了一个例子,希望对大家有帮助。
html页面:
<script type=’text/javascript’ src="http://sto.shawei.com/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function check(){
var url = "http://newhk.api.favspot.net/merchant/ApplyCheckSpotExist.php?jsoncallback=?";
try{
$.getJSON(
url,
{"spot_id":4401},
function(json){
try{
alert(json.status);
}
catch(e){}
}
);
}
catch(e){
alert(e);
}
}
check();
</script>
PHP ApplyCheckSpotExist.php页面:
$result = json_encode($data);
if($_REQUEST[’jsoncallback’]){
echo $_REQUEST[’jsoncallback’]."(".$result.")";
}else{
echo $result;
}
来源:http://blog.sina.com.cn/s/blog_6324c2380100rkwb.html