2015-09-09 10:49:03
在进行web前端开发过程中,有时候会遇到调用的接口和前端文件不在一个域名之下,出于安全方面的考虑,页面中的JavaScript无法访问其他服务器上的数据,即“同源策略”。而跨域就是通过某些手段来绕过同源策略限制,实现不同服务器之间通信的效果。这样就产生了跨域的问题。下面我来介绍一种通过jsonp实现的ajax解决跨域问题,后台例子程序为java。
先看一下前台的ajax程序代码
function login(){
var name=$("#na").val();
var psd = $("#pa").val();
$.ajax({
url: 'Choice/user_login.java?name='+name+'&&password='+psd,
type: "get",
dataType:'jsonp',
jsonp: "callback",
jsonpCallback:"success_jsonpCallback",
success: function(data) {
alert(data.result);
if(data.result!=0){
alert("登陆成功");
}else{
alert("登录失败");
}
}
});
}
jsonp只能采用get方式来传输数据,在来看一下java程序的代码
public void login(){
Gson gson = new Gson();
System.out.println("============login");
try{
String na =new String(name.getBytes("iso8859-1"), "UTF-8");
System.out.println(name+"=====登录");
String data_stroage = gson.toJson(userManager.findUserByName(na,password));
HttpServletRequest request = ServletActionContext.getRequest();
String callback = request.getParameter("callback");
String jsoncallback = callback + "({'result':"+data_stroage+"})";
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print(jsoncallback);
out.flush();
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
由于get方式传输中文会产生乱码问题,故在上面的代码进行了编码格式转换
下面来看一下中间的数据传输,下图分别为后台返回的数据和前台传输的数据。