发表新主题 回复该帖子
主题:jQuery.getJSON 跨域访问远程数据源“拒绝访问”的解决方法
唧唧
帖子档案  楼主 jQuery.getJSON 跨域访问远程数据源“拒绝访问”的解决方法   Post by : 2011-01-13 09:50:21.0
  • 幼儿园
  • 幼儿园
  • UID:3
  • 主题:342
  • 帖子:781
  • 加为好友 加为好友    发送短信 发送短信

昨天在开发一个腾讯微博API的时候,遇到jQuery.getJSON跨域名远程访问json数据源的时候,报“拒绝访问”的脚本错误。

修改前:

   javascript代码
  1. $.getJSON(apiURL+"gethtlist.jsp"
  2.       {"page":page,"pageSize":pageSize,"pageinfo":pageinfo}, 
  3.       function(json){ 
  4.             alert(json); 
  5.       }); 

修改后:

   javascript代码
  1. $.getJSON(apiURL+"gethtlist.jsp?jsoncallback=?"
  2.       {"page":page,"pageSize":pageSize,"pageinfo":pageinfo}, 
  3.       function(json){ 
  4.             alert(json); 
  5.       }); 

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参数给他,服务器端就可以不用动态获取了。

参考文档:
jQuery 1.3 API 参考文档中文版
Remote JSON - JSONP

签名
 ★★★★★★★★
 纵里寻她千百度,蓦然回首,那人却在,灯火阑珊处!
 MyBlog :http://blog.javawind.net
返回页面顶部  

irene123
2F Re:~   Post by : 2011-12-07 15:55:35.0
  • 幼儿园
  • 幼儿园
  • UID:802
  • 主题:0
  • 帖子:31
  • 加为好友 加为好友    发送短信 发送短信
学习了em03em26
签名
sf123
cqsf
返回页面顶部  


CopyRight © 2008-2009 JavaWind.Net Studio All Rights Reserved
Powered By JWind.BBS Vesion 1.0.0 Beta1 Processed in 38 ms,0 (Queries)  Gzip enabled

WAP - 清除Cookies - 联系我们 - JavaWind.Net Studio - Archiver - TOP Valid XHTML 1.0 Transitional Valid CSS! 粤ICP备07511478号