jsop跨域请求方式--及中文乱码解决方案

问题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

 

转载于:https://www.cnblogs.com/Nico-luo/p/8065880.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值