Ajax跨域請求以及亂碼解決
Ajax跨域請求2種解決方法
1 ) 什麽叫跨域請求,協議,域名,端口號,其中一樣不同都稱跨域;
第一種:使用script標簽發送請求;
//創建一個script標簽;
var v_element=document.createElement("script");
//設置script的type 屬性;
v_element.type="text/javascript";
//設置src屬性;
v_element.src="http://127.0.0.1:8080/包名/login.do?"+v_data; //v_data參數;
//把script扔到head標簽裏面去,給head增加一個孩子;
document.getElementsByTagName("HEAD")[0].appendChild(v_element);
這樣怎麽調用回調?
在data.jsp上調用回調方法即可
callBack("${data}")
因為使用El表達式,所以必須加雙引號;
第二種:在servlet裏把頭文信息設置,添加下面兩行代碼就可以了
response.setHeader("Access-Control-Allow-Origin", "*"); //允許所有跨域
response.setHeader("Access-Control-Allow-Methods", "POST,GET"); //post&get兩種都允許
2 ) 什麽叫亂碼? --分為兩種--
請求數據亂碼
盡可能使用post請求避免亂碼,後臺使用request.setCharacterEncoding("UTF-8")設置請求對象編碼
如果非要使用get請求,可以在js頁面,將事先需要傳遞的數據轉換成UTF-8格式,後臺就可以直接獲取了
例:“login.do?”+encodeURI(數據)
響應數據亂碼
如果要通過servlet返回響應,servlet需要設置
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
通常不推薦這種方式返回信息,推薦用jsp作為響應的頁面,這個頁面只需要擁有一個El的表達式即可;
Ajax跨域請求以及亂碼解決