通过 jsp 上 书写 java 代码 执行 http 请求 中转 来处理跨域问题
ajax.jsp java相关代码
<%@ page import="java.net.*,java.util.*,java.lang.*,java.io.*"%>
<%@ page contentType="text/xml;charset=utf-8"%>
<%
//1.接收url参数
String url = null;
StringBuffer params = new StringBuffer();
Enumeration enu = request.getParameterNames();
int total = 0;
while (enu.hasMoreElements()) {
String paramName = (String) enu.nextElement();
if (paramName.equals("url")) {
url = request.getParameter(paramName);
} else {
if (total == 0) {
params.append(paramName)
.append("=")
.append(URLEncoder.encode(
request.getParameter(paramName), "UTF-8"));
} else {
params.append("&")
.append(paramName)
.append("=")
.append(URLEncoder.encode(
request.getParameter(paramName), "UTF-8"));
}
++total;
}
}
//2.请求url获取数据
if (url != null) {
// 使用GET方式向目的服务器发送请求
URL connect = new URL(url.toString());
URLConnection connection = connect.openConnection();
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));//注意处理编码问题
String line;
while ((line = reader.readLine()) != null) {
out.println(line);//输出数据给ajax回调函数接收
}
reader.close();
}
%>
封装的 AJAX .js
/**
* JavaScript Ajax Library
*
*
* get调用方式
* Ajax.get(
* url,
* function(data){
* //处理返回数据后
* },async
* );
*
* post调用方式
* Ajax.post(
* url,
* function(data){
* //处理返回数据后
* },async
* );
*/
var AJAXPROXY = js/ajax.jsp?url=';//注意ajax.jsp路径
var Ajax = new Object();
Ajax.request = function(){
if(window.XMLHttpRequest) {
var Ajax = new XMLHttpRequest();
}else if (window.ActiveXObject) {
try {
var Ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
var Ajax = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!Ajax) {
/*window.alert("不能创建XMLHttpRequest对象<SPAN class=hilite2>实例</SPAN>.");*/
return false;
}
return Ajax;
};
Ajax.req = Ajax.request();
Ajax.Handle = function(callback){
Ajax.req.onreadystatechange=function(){
if(Ajax.req.readyState==4){
if(Ajax.req.status==200){
callback(Ajax.req.responseText);
}
}
};
};
Ajax.get = function(url,callback,async){
async=async=="undefined"?true:false;
url = AJAXPROXY+encodeURIComponent(url);
Ajax.req.open('get',url,async);
Ajax.req.send(null);
!async?callback(Ajax.req.responseText):Ajax.Handle(callback);
};
Ajax.post = function(url,callback,async){
async=async=="undefined"?true:false;
url = AJAXPROXY+encodeURIComponent(url);
Ajax.req.open('post',url,async);
Ajax.req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
Ajax.req.send(null);
!async?callback(Ajax.req.responseText):Ajax.Handle(callback);
};
/*字符串转换成json*/
function strToJson(str){
return eval('('+str+')');
};
调用例子,参数说明
Ajax.get('http://second_ftp_server:8180/weixin-developer/ajaxMain.do?methodName=getSign&url='+encodeURI(window.location.href),
function(data){
//处理返回数据后
weixin.sign=JSON.parse(data);
alert(weixin.sign);
},false);
3个参数 url 要执行的请求获取数据的 url ,fun () 执行完成之后的 回调函数, async 异步/同步 请求