(1) Ajax 中文問題
中文在做為參數傳遞的過程中是以UTF-8的方式對漢字進行編碼。
var url = encodeURI(url);注意:IE中兩次encodeURI
比如"中"這個漢字,會以%E4%B8%AD傳送。
在伺服器端,取到參數以後。必須要解密
String old = request.getParameter("name");
則在伺服器端這樣解碼
String name = URLDecoder.decode(old,"UTF-8");
(2) Ajax 跨域問題
同域:如果HTML代碼和伺服器代碼在同一個伺服器上就叫同域。
跨域:如果HTML代碼和伺服器代碼不在同一個伺服器上就叫跨域。
跨域問題,Javascript出於安全性考慮,是不允許跨域調用其他頁面的對象的。
通過iframe 實現安全性極差,容易導致中病毒和木馬。
讓頁面端程式先訪問同網域服務器端的代理程式,通過代理程式和遠端伺服器上的
程式互動。因為代理程式是用java寫的,所有可以訪問任何遠程伺服器上的程式。
用戶端:
function converURL(url){
if(url.substring(0,7)=="http://"){
url.replace("?","&");
url="Proxy?url"+url
}
return url;
}
Proxy 伺服器端:
(1)拿到用戶端的URL和參數資訊
(2)通過URL connect = new URL(url.toString());
URLConnection connection = connect.openConnection();
OutputStreamWriter paramout = new OutputStreamWriter(connection.getOutputStream());
來訪問遠程伺服器代碼,最後在Proxy 伺服器端把處理資料通過流的形式發送到瀏覽器上去。
(3) Ajax 緩衝問題
在Ajax 中只要請求地址相同IE讀取瀏覽器的緩衝資訊沒有和伺服器進行互動。在請求地址上
加上時間戳記,騙過瀏覽器,使請求地址不一樣,不讀取緩衝。發送新的請求。
var timestamp = new Date();
if(url.indexOf("?")>=0){
url=url+"&date"+timestamp ;
} else {
url= url+"?date"+timestamp;
}
這樣保證瀏覽器每次請求都是不一樣的。