zoukankan      html  css  js  c++  java
  • jquery ajax跨域的完美解决方法(jsonp方式)

    ajax跨域请求的问题,JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式,接下来为大家详细介绍下客户端JQuery.ajax的调用代码
     
     
    今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发
    JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式。分别是JQuery的 jquery.ajax jsonp格式和jquery.getScript方式。

    什么是jsonp格式呢?API原文:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。意思就是远程服务端需要对返回的数据做下处理,根据客户端提交的callback的参数,返回一个callback(json)的数据,而客户端将会用script的方式处理返回数据,来对json数据做处理。JQuery.getJSON也同样支持jsonp的数据方式调用。  

    1
    $.ajax({
     2                     url:basepath+"/login/login?msg_base64="+msg_base64,
     3                     async: false,
     4 //                    data:{
     5 //                        "formContent":str,
     6 //                        "formName":formName,
     7 //                        "leixing":leixing
     8 //                    },
     9                     dataType:"jsonp",
    10                     processData: false,     
    11                     type:"get",
    12                     success:function(data){
    13                         data=data[0];
    14                         alert(data);
    15                         if(data.status=="0"){
    16                             $("#usererror").html(data.msg);
    17                         }else if(data.status=="1"){
    18                             $("#pwderror").html(data.msg);
    19                             }
    20                         else if(data.status=="2"){
    21                             alert("水电费:"+data.data);
    22                             addCookie("token",data.data,1);//将令牌存入cookie中
    23                             window.location.href="edit.html";
    24                             }
    25                     }
    26                 });
     1 @ResponseBody // 将方法的返回结果自动转换为json格式字符串,注意需要导json的包
     2     @RequestMapping(value = "/login", method = RequestMethod.GET)
     3     public String login(HttpServletRequest request,String msg_base64) {
     4         
     5         
     6         String callback=request.getParameter("callback");
     7         //System.out.println(callback);
     8                                                                 // 信息
     9 //        String msg_context_base64 = msg_base64.split(" ")[1];
    10         String msg = NoteUtil.base64Decode(msg_base64);// 解密,解密后:username:password
    11         String name = msg.split(":")[0];
    12         String pwd = msg.split(":")[1];
    13         NoteResult result = service.checkUser(name, pwd);
    14         System.out.println("result  "+result.toString());
    15         JSONArray json=JSONArray.fromObject(result);
    16         System.out.println("  "+callback+"("+json+")");
    17         return callback+"("+json.toString()+")";
    18     }
    19     
  • 相关阅读:
    web服务之NginX介绍
    LVS介绍以及工作模式案例
    sersync 实现实时数据同步
    Java高并发20-并发包中锁原理解析(二)
    Java高并发19-并发包中锁原理解析(一)
    从零开始学VUE之VueRouter(导航守卫)
    从零开始学VUE之VueRouter(传递参数)
    从零开始学VUE之VueRouter(嵌套路由)
    从零开始学VUE之VueRouter(路由懒加载)
    从零开始学VUE之VueRouter(动态路由)
  • 原文地址:https://www.cnblogs.com/feiyuanxing/p/4575888.html
Copyright © 2011-2022 走看看