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     

 

你可能感兴趣的:(jQuery ajax)