天天看點

ajax 代理 中轉 http請求,處理 跨域通路 問題

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

繼續閱讀