未来星开发团队的官网

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     

 

posted @ 2015-06-14 22:43  费元星的博客  阅读(6786)  评论(0编辑  收藏  举报
未来星开发团队的官网