dataType:預(yù)期的服務(wù)器返回的數(shù)據(jù)類型
出現(xiàn)的問題:當(dāng)設(shè)置了dataType:"json"時,如果后端返回了String,則ajax無法執(zhí)行。
前端:
$.ajax({
????dataType: "json",
????type:"post",
????url:"../delete",
????data: {
????????"id": id
????},
????success:function(result) {
? ? ? ? ? console.log(result);
????},
????error:function(msg) {
? ? ? ? alert("加載數(shù)據(jù)出錯?。?!");
????}
});
后端:
@RequestMapping(value ="/delete", method = RequestMethod.POST)
@ResponseBody
public String deleteApp(HttpServletRequest request) {
????logger.info("Delete info from table.");
????Long id= Long.parseLong(request.getParameter("id"));//獲取id
????mamMapper.deleteApp(id);????//通過mybatis來刪除數(shù)據(jù)
????return "success";????//返回一個數(shù)據(jù),來刷新前端的列表,注意這里,返回了字符串
}
解釋:后端直接返回了"success"字符串,而前端期望得到j(luò)son格式的數(shù)據(jù),例如:{"result" : "success"}。從而導(dǎo)致前端無法處理接收到的數(shù)據(jù)。
解決辦法:
1.直接將dataType去掉即可,ajax會自動適配。
2.將 dataType: "json" 改為 dataType: "text" 即可。
Ajax參數(shù)的具體介紹如下:
預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定,jQuery 將自動根據(jù) HTTP 包 MIME 信息來智能判斷,比如 XML MIME 類型就被識別為 XML。在 1.4 中,JSON 就會生成一個 JavaScript 對象,而 script 則會執(zhí)行這個腳本。隨后服務(wù)器端返回的數(shù)據(jù)會根據(jù)這個值解析后,傳遞給回調(diào)函數(shù)??捎弥?
"xml": 返回 XML 文檔,可用 jQuery 處理。
"html": 返回純文本 HTML 信息;包含的 script 標(biāo)簽會在插入 dom 時執(zhí)行。
"script": 返回純文本 JavaScript 代碼。不會自動緩存結(jié)果。除非設(shè)置了 "cache" 參數(shù)。注意:在遠(yuǎn)程請求時(不在同一個域下),所有 POST 請求都將轉(zhuǎn)為 GET 請求。(因為將使用 DOM 的 script標(biāo)簽來加載)
"json": 返回 JSON 數(shù)據(jù) 。
"jsonp": JSONP 格式。使用 JSONP 形式調(diào)用函數(shù)時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。
"text": 返回純文本字符串