本文參考了兩篇博客的內容:
http://blog.csdn.net/john1337/article/details/60867183
http://blog.csdn.net/qq441568267/article/details/75353825
contentType: 告訴服務器,我要發什麼類型的數據
dataType:告訴服務器,我要想什麼類型的數據,如果沒有指定,那麼會自動推斷是返回 XML,還是JSON,還是script,還是String。
ajax請求中contentType與dataType含義
前端jQuery ajax 請求:
- $.ajax({
- url: getAbsoluteUrl('score/findScore'),
- type: 'POST',
- dataType: 'json', //第1處
- success: function (res) {
- alert(res);
- },
- error: function (msg) {
- alert(msg);
- }
- });
- @RequestMapping(value = "findScore", method = RequestMethod.POST, produces = "application/json")
- public @ResponseBody Map findScore(Model model, ServletRequest request) {
- Map<String , Object> map = new LinkedHashMap<String, Object>();
- map.put("createdUser","jiabaochina");
- map.put("score", 5);
- map.put("status", "success");
- return map;
- }
這是因爲ajax請求dataType值爲json,jquery就會把後端返回的字符串嘗試通過JSON.parse()嘗試解析爲js對象。
我又把dataType值改爲'text',結果彈出框直接顯示後臺返回的json字符串。
我又把dataType值改爲'html',結果彈出框直接顯示後臺返回的json字符串。
以下是jquery api的解釋:
通過dataType選項還可以指定其他不同數據處理方式。除了單純的XML,還可以指定 html、json、jsonp、script或者text。
其中,text和xml類型返回的數據不會經過處理。數據僅僅簡單的將XMLHttpRequest的responseText或responseHTML屬性傳遞給success回調函數,
'''注意''',我們必須確保網頁服務器報告的MIME類型與我們選擇的dataType所匹配。比如說,XML的話,服務器端就必須聲明 text/xml 或者 application/xml 來獲得一致的結果。
如果指定爲html類型,任何內嵌的JavaScript都會在HTML作爲一個字符串返回之前執行。類似的,指定script類型的話,也會先執行服務器端生成javascript,然後再把腳本作爲一個文本數據返回。
如果指定爲json類型,則會把獲取到的數據作爲一個JavaScript對象來解析,並且把構建好的對象作爲結果返回。爲了實現這個目的,他首先嚐試使用JSON.parse()。如果瀏覽器不支持,則使用一個函數來構建。JSON數據是一種能很方便通過JavaScript解析的結構化數據。如果獲取的數據文件存放在遠程服務器上(域名不同,也就是跨域獲取數據),則需要使用jsonp類型。使用這種類型的話,會創建一個查詢字符串參數 callback=? ,這個參數會加在請求的URL後面。服務器端應當在JSON數據前加上回調函數名,以便完成一個有效的JSONP請求。如果要指定回調函數的參數名來取代默認的callback,可以通過設置$.ajax()的jsonp參數。
contentType: 告訴服務器,我要發什麼類型的數據