Ajax與SpringMVC以JSON格式交互

最近寫ajax跟SpringMVC交互的程序比較多,遇到問題也比較多,總結(jié)一下。

1、客戶端jquery使用ajax向服務(wù)器傳值并取返回的值:

$.ajax({

url:url,//服務(wù)地址

data:{"name":"jack"},//請(qǐng)求的參數(shù)

dataType:'json',//返回值格式,html,json,jsonp等,

contentType: 'application/x-www-form-urlencoded',//請(qǐng)求的格式,默認(rèn)這個(gè),還有application/json等

type:'POST',//GET或POST

processData:true,//只要不是字符串,都會(huì)轉(zhuǎn)成查詢字符串,可以手動(dòng)設(shè)置false

success:function(data){//成功時(shí)出發(fā)的函數(shù),返回的是json對(duì)象,可以直接取值,如果是jsonp格式,需要自己去殼。

var userId = data.userId;

},

error:function(XMLHttpRequest, textStatus, errorThrown) {//報(bào)錯(cuò)時(shí)觸發(fā)的函數(shù)

var msg = XMLHttpRequest.status+"_"+XMLHttpRequest.readyState+"_"+textStatus+"_"+errorThrown;

}

});

1)type

如果type為GET,那么參數(shù)列表會(huì)跟在url后邊,url?name=jack&age=16,在瀏覽器中可以被用戶看到。
如果type為POST,參數(shù)會(huì)在body中傳遞,不會(huì)被看到。

2)data

data比較多樣,一般為字符串或json對(duì)象。如果是json對(duì)象,processData 不為false的話,json對(duì)象會(huì)轉(zhuǎn)成字符串,
注意:{"name":"jack"}這是json對(duì)象,‘{"name":"jack"}‘這是字符串(json對(duì)象的字符串),data需要傳json對(duì)象。
想以字符串的形式傳參數(shù),需要自己寫成name=jack&age=16 的格式。

3)dataType:

"xml": 返回 XML 文檔,可用 jQuery 處理。
"html": 返回純文本 HTML 信息;包含的 script 標(biāo)簽會(huì)在插入 dom 時(shí)執(zhí)行。
"script": 返回純文本 JavaScript 代碼。不會(huì)自動(dòng)緩存結(jié)果。除非設(shè)置了 "cache" 參數(shù)。注意:在遠(yuǎn)程請(qǐng)求時(shí)(不在同一個(gè)域下),所有 POST 請(qǐng)求都將轉(zhuǎn)為 GET 請(qǐng)求。(因?yàn)閷⑹褂?DOM 的 script標(biāo)簽來加載)
"json": 返回 JSON 數(shù)據(jù) 。
"jsonp": JSONP 格式。使用 JSONP 形式調(diào)用函數(shù)時(shí),如 "myurl?callback=?" jQuery 將自動(dòng)替換 ? 為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。
"text": 返回純文本字符串

4)contentType

默認(rèn)是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());

}*/

}

注意點(diǎn)1

不管是json還是jsonp,ajax和服務(wù)器需要統(tǒng)一。

注意點(diǎn)2

另外,服務(wù)器端以request.getParameter("userId")這種方式取值,需要客戶端滿足以下條件:
1)、客戶端訪問方式是GET,意味著所有參數(shù)在url后邊。contentType 無所謂。
或者2)、客戶端是POST,contentType需要為默認(rèn)的application/x-www-form-urlencoded,data需要是個(gè)json對(duì)象,或自己把json對(duì)象組織成name=jack&age=16形式的字符串。

注意點(diǎn)3

如果contentType 為application/json,那么數(shù)據(jù)會(huì)以流的形式寫在inputstream里,需要自己取出來轉(zhuǎn)換。用的不多,不寫代碼了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容