AJAX跨域与JSONP的一点实践经验
2014-12-28 13:22
316 查看
前几个周,项目中遇到了AJAX跨域的问题,然后找资料解决了。
首先要说明一点,关于AJAX的跨域原理和实践,我的经验还是比较少的,我只是大致看了下网上的资料,结合自己的理解,找到了解决办法,暂时不去仔细研究,因为要做的事情太多了,不可能把所有的问题都给研究透彻了。
问题场景:
a.com访问二级域名cms.a.com上的AJAX请求,遇到了跨域问题,Chrome-Firefox都没有问题,IE7-8-9都没有数据,直接报错了。貌似AJAX跨域不同浏览器的机制不一样。
网上有提到一种叫“JSONP”的技术,大概的意思是,我们可以直接修改<script src=""></script>的src属性,从而绕过AJAX跨域这个限制。
$.getJSON("http://cms.a.com/post/recentpost.json?jsoncallback=?",{count:count,categoryid:categoryid}, function(data){ });});
getJSON是jquery提供的API,专门用来获得JSON格式的数据,貌似是JSONP原理实现,尚未研究。
大致的思路是,在向后端发送请求的时候,多发送一个参数,即回调函数的名字,我自己取的名字是jsoncallback,后台响应方式:
//对外提供的服务接口 @RequestMapping(value = "recentpost") public void recentPost(Integer categoryid,String jsoncallback,Integer count,Model model,HttpServletResponse response) { List<Map<String,Object>> list = postService.listRecent(categoryid,count); String str=JSONObject.toJSONString(list); str =jsoncallback+"("+str+")"; super.returnMessage(response, str); }
返回的格式是,myCallback({a:1,b:2}) ,myCallback是回调函数的值。
后端那个响应方法有点局限,应该需要做下判断,如果前端传入了jsoncallbak就按照jsonp的方式返回,如果是正常是非跨域AJAX请求,没有callback参数,就返回另外一种格式的数据。
参考资料: http://blog.csdn.net/hemingwang0902/article/details/4811064 http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html http://www.cnblogs.com/IT-Cristian/archive/2010/01/28/1658363.html http://blog.jobbole.com/53487/
首先要说明一点,关于AJAX的跨域原理和实践,我的经验还是比较少的,我只是大致看了下网上的资料,结合自己的理解,找到了解决办法,暂时不去仔细研究,因为要做的事情太多了,不可能把所有的问题都给研究透彻了。
问题场景:
a.com访问二级域名cms.a.com上的AJAX请求,遇到了跨域问题,Chrome-Firefox都没有问题,IE7-8-9都没有数据,直接报错了。貌似AJAX跨域不同浏览器的机制不一样。
网上有提到一种叫“JSONP”的技术,大概的意思是,我们可以直接修改<script src=""></script>的src属性,从而绕过AJAX跨域这个限制。
$.getJSON("http://cms.a.com/post/recentpost.json?jsoncallback=?",{count:count,categoryid:categoryid}, function(data){ });});
getJSON是jquery提供的API,专门用来获得JSON格式的数据,貌似是JSONP原理实现,尚未研究。
大致的思路是,在向后端发送请求的时候,多发送一个参数,即回调函数的名字,我自己取的名字是jsoncallback,后台响应方式:
//对外提供的服务接口 @RequestMapping(value = "recentpost") public void recentPost(Integer categoryid,String jsoncallback,Integer count,Model model,HttpServletResponse response) { List<Map<String,Object>> list = postService.listRecent(categoryid,count); String str=JSONObject.toJSONString(list); str =jsoncallback+"("+str+")"; super.returnMessage(response, str); }
返回的格式是,myCallback({a:1,b:2}) ,myCallback是回调函数的值。
后端那个响应方法有点局限,应该需要做下判断,如果前端传入了jsoncallbak就按照jsonp的方式返回,如果是正常是非跨域AJAX请求,没有callback参数,就返回另外一种格式的数据。
参考资料: http://blog.csdn.net/hemingwang0902/article/details/4811064 http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html http://www.cnblogs.com/IT-Cristian/archive/2010/01/28/1658363.html http://blog.jobbole.com/53487/
相关文章推荐
- AJAX跨域与JSONP的一点实践经验
- AJAX跨域与JSONP的一点实践经验
- 每日学一点-jsonp(ajax跨域请求)
- 每日学一点-jsonp(ajax跨域请求)
- jsonp实现ajax跨域的使用经验
- AJAX跨域与JSONP的一点实践经验
- AJAX跨域 jQuery JSONP 实践
- 通过jsonp解决ajax的跨域请求问题
- 跨域请求之jQuery的ajax jsonp的使用解惑
- AJAX 跨域请求 - JSONP获取JSON数据
- AJAX 跨域请求 - JSONP获取JSON数据
- PHP AJAX JSONP实现跨域请求使用实例
- Ajax跨域请求解决方案——jsonp
- AJAX 跨域请求 - JSONP获取JSON数据
- ajax跨域?(jsonp)
- Ajax+Servlet、jsonp+Servlet、 jsonp+Struts2 实现跨域
- 跨域解决方案之一---->JQuery.Ajax JSONP解决跨域访问
- 通过jsonp获取json数据实现AJAX跨域请求
- jQuery的ajax跨域 Jsonp原理
- jsonp其实很简单【ajax跨域请求】