最近寫ajax跟SpringMVC交互的程序比較多索赏,遇到問題也比較多盼玄,總結(jié)一下。
1潜腻、客戶端jquery使用ajax向服務(wù)器傳值并取返回的值:
$.ajax({
url:url,//服務(wù)地址
data:{"name":"jack"},//請求的參數(shù)
dataType:'json',//返回值格式埃儿,html,json融涣,jsonp等童番,
contentType: 'application/x-www-form-urlencoded',//請求的格式,默認這個威鹿,還有application/json等
type:'POST',//GET或POST
processData:true,//只要不是字符串剃斧,都會轉(zhuǎn)成查詢字符串,可以手動設(shè)置false
success:function(data){//成功時出發(fā)的函數(shù)忽你,返回的是json對象幼东,可以直接取值,如果是jsonp格式,需要自己去殼筋粗。
var userId = data.userId;
},
error:function(XMLHttpRequest, textStatus, errorThrown) {//報錯時觸發(fā)的函數(shù)
var msg = XMLHttpRequest.status+"_"+XMLHttpRequest.readyState+"_"+textStatus+"_"+errorThrown;
}
});
1)type
如果type為GET策橘,那么參數(shù)列表會跟在url后邊,url?name=jack&age=16娜亿,在瀏覽器中可以被用戶看到丽已。
如果type為POST,參數(shù)會在body中傳遞买决,不會被看到沛婴。
2)data
data比較多樣,一般為字符串或json對象督赤。如果是json對象嘁灯,processData 不為false的話,json對象會轉(zhuǎn)成字符串躲舌,
注意:{"name":"jack"}這是json對象丑婿,‘{"name":"jack"}‘這是字符串(json對象的字符串),data需要傳json對象没卸。
想以字符串的形式傳參數(shù)羹奉,需要自己寫成name=jack&age=16 的格式。
3)dataType:
"xml": 返回 XML 文檔约计,可用 jQuery 處理诀拭。
"html": 返回純文本 HTML 信息;包含的 script 標簽會在插入 dom 時執(zhí)行煤蚌。
"script": 返回純文本 JavaScript 代碼耕挨。不會自動緩存結(jié)果。除非設(shè)置了 "cache" 參數(shù)尉桩。注意:在遠程請求時(不在同一個域下)筒占,所有 POST 請求都將轉(zhuǎn)為 GET 請求。(因為將使用 DOM 的 script標簽來加載)
"json": 返回 JSON 數(shù)據(jù) 蜘犁。
"jsonp": JSONP 格式赋铝。使用 JSONP 形式調(diào)用函數(shù)時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數(shù)名沽瘦,以執(zhí)行回調(diào)函數(shù)革骨。
"text": 返回純文本字符串
4)contentType
默認是application/x-www-form-urlencoded,絕大多數(shù)情況通用,也可根據(jù)需要改為application/json等
2析恋、服務(wù)端取傳過去的值良哲,并返回值
@RequestMapping("mlogin")
public void domLogin(HttpServletRequest request,HttpServletResponse response) {
try{
StringuserId= req.getParameter("userId");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String strJSON = "{\"name\":\"" +userId+ "\"}";
response.getWriter().write(strJSON);
}catch(Exception e){
logger.error("respone Exception : ", e.getMessage());
}
//JsonP格式的數(shù)據(jù)
/*try{
String callback = request.getParameter("callback");
StringuserId= req.getParameter("userId");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String strJSON = callback+"({\"name\":\"" +userId+ "\"})";
response.getWriter().write(strJSON);
}catch(Exception e){
logger.error("respone Exception : ", e.getMessage());
}*/
}
注意點1
不管是json還是jsonp,ajax和服務(wù)器需要統(tǒng)一助隧。
注意點2
另外筑凫,服務(wù)器端以request.getParameter("userId")這種方式取值滑沧,需要客戶端滿足以下條件:
1)、客戶端訪問方式是GET巍实,意味著所有參數(shù)在url后邊滓技。contentType 無所謂。
或者2)棚潦、客戶端是POST令漂,contentType需要為默認的application/x-www-form-urlencoded,data需要是個json對象丸边,或自己把json對象組織成name=jack&age=16形式的字符串叠必。
注意點3
如果contentType 為application/json,那么數(shù)據(jù)會以流的形式寫在inputstream里妹窖,需要自己取出來轉(zhuǎn)換纬朝。用的不多,不寫代碼了骄呼。