问题1:jsonp返回的数据中文乱码,设置了response.setCharacterEncoding("utf-8");无效?
1.实测解决方案:
在controller的@requestmapping()注解中添加属性product:
@RequestMapping(value = "/value",produces={"text/html;charset=UTF-8;","application/json;"})
对于经常用jQuery的开发者来说,能注意到jQuery封装的$.ajax
中有一个dataType
属性,如果将该属性设置成dataType:"jsonp"
,就能实现JSONP跨域了。需要了解的一点是,虽然jQuery将JSONP封装在$.ajax
中,但是其本质与$.ajax
不一样。
通过jQuery的$.ajax
实现跨域的代码参考如下
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>jQuery实现JSONP</title> 6 </head> 7 <body> 8 <div id="mydiv"> 9 <button id="btn">点击</button> 10 </div> 11 </body> 12 <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.min.js"></script> 13 <script type="text/javascript"> 14 $(function(){ 15 $("#btn").click(function(){ 16 17 $.ajax({ 18 async : true, 19 url : "https://api.douban.com/v2/book/search", 20 type : "GET", 21 dataType : "jsonp", // 返回的数据类型,设置为JSONP方式 22 jsonp : 'callback', //指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback 23 jsonpCallback: 'handleResponse', //设置回调函数名 24 data : { 25 q : "javascript", 26 count : 1 27 }, 28 success: function(response, status, xhr){ 29 console.log('状态为:' + status + ',状态是:' + xhr.statusText); 30 console.log(response); 31 } 32 }); 33 }); 34 }); 35 </script> 36 </html>
后台代码:
ajax设置为json返回类型的时候,后台返回类型就是json,如果ajax设置dateType为jsonp,则后台要设置返回类型为String类型,且返回值设置格式如下:
return callback+ "(" + jb.toString() + ")";
1 @ResponseBody 2 @RequestMapping(value = "/info",produces={"text/html;charset=UTF-8;","application/json;"}) 3 public String save(HttpServletRequest request, HttpServletResponse response) 4 throws Exception { 5 logBefore(logger, "开始"); 6 Logger log=Logger.getLogger(CreditInfoController.class); 7 ModelAndView mv = this.getModelAndView(); 8 PageData pd = new PageData(); 9 pd = this.getPageData(); 10 //设置默认更新数据 11 updateT=true; 12 /* 设置格式为text/json */ 13 response.setContentType("text/json"); 14 /* 设置字符集为'UTF-8' */ 15 response.setCharacterEncoding("utf-8"); 16 //response.setHeader("Access-Control-Allow-Origin", "*"); 17 String callback = request.getParameter("callback"); 18 JSONObject jb = new JSONObject(); 19 String token=request.getParameter("token"); 20 if(request.getParameter("company")==null || request.getParameter("contractObject")==null || token==null){ 21 jb.put("riskItem", "缺少参数"); 22 return callback+ "(" + jb.toString() + ")";
问题1:
jsonp请求 毫无反应的异常问题?
原因分析:1.服务器未启动。由于$.ajax集成的jsonp请求,服务器如果关闭了,是不会有任何错误提示的,可以增加一个timeout时间,超过请求时间自动进入error。
2.域名解析异常。内网的部分电脑域名解析异常,造成无法解析成功,不能发送请求,更改正确的DNS域名后,刷新电脑DNS缓存,刷新浏览器DNS缓存。
参考链接:http://blog.csdn.net/u014607184/article/details/52027879
http://www.jb51.net/article/115230.htm
http://blog.csdn.net/mggwct/article/details/47355323