AJAX如何跨域请求数据
昨天用到了跨域请求数据
然而对于第一次使用跨域请求的我来说,确实遇到了不少的阻力
不过最终还解决了
解决思路如下:
第一:跨域请求只能是get,所以请您在服务器端不要禁止get请求
第二:跨域请求的ajax应该使用jsonp
第三:后端接收这个jsonp然后连同json数据一起返回
第四:最后返回的数据一定是这样的
jsonp([{},{}])
jsonp
是前端的函数名
看以下代码可能会帮助您理解
Ajax代码如下:
<script type="text/javascript"> $.ajax({ url:"https://www.bugkong.com/XXXXX", dataType:'jsonp', jsonp:'callback', success:function(result) { alert("ok"); }, error:function(){ }, timeout:3000 }); </script>
以上代码我简要说明一下:
url:跨域请求的地址
dataType的参数是 jsonp,这个是必须的
jsonp的参数是callback,这个名字是可以随意更改的
SpringMVC服务端代码如下:
//callback是jq函数的名字 @RequestMapping(value="/urltext",produces="application/json;charset=UTF-8") public @ResponseBody String retext(@RequestParam String showurl,@RequestParam String callback,@RequestParam String showtitle,HttpSession session, HttpServletRequest request){ String urltext = ((JSONObject)(JSON.parseArray(usltext.UrlText()).get(0))).getString("1"); show.show(showurl,urltext, showtitle,session, request); return callback+"("+usltext.UrlText()+")"; }以上代码也需要说明几点:
1、参数比如获得callback,这个callback是和上面ajax中 jsonp的参数是一致的,这里是callback
2、返回语句
返回语句是callback+(括号里是json数组,格式是[{},{}])
就是说最后返回的完整数据是
callback([{......},{......}])
callback是前端的函数名,这个函数名由jq自动参数,大家可以查看前端
那么前端访问就很简单了
返回的数据:result就是一个json数组,不包括callback的json数组
就是返回的result只是 这部分 [{......},{......}]
如 result[0][2] 表示第一个对象,key为2的值
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情