zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【Leetcode】【Easy】Remove Duplicates from Sorted List
    【Leetcode】【Easy】Pascal's Triangle II
    【Leetcode】【Easy】Pascal's Triangle
    【Leetcode】【Easy】Binary Tree Level Order Traversal II
    【Leetcode】【Easy】Binary Tree Level Order Traversal
    【Leetcode】【Easy】Maximum Depth of Binary Tree
    【Leetcode】【Easy】Minimum Depth of Binary Tree
    【Leetcode】【Easy】Balanced Binary Tree
    【Leetcode】【Easy】Symmetric Tree
    如何使用Action.Invoke()触发一个Storyboard
  • 原文地址:https://www.cnblogs.com/Nico-luo/p/8065880.html
Copyright © 2011-2022 走看看