通過 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 異步/同步 請求