今天用ajax 向后台發送 post請求時,出現了兩個問題:
1, 發送請求后,控制台 返回 Unsupported media type-415(不支持的媒體類型),這時突然想起來,post 請求要設置請求頭,於是 寫了 xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded.'); 再次發送請求,還是報同樣的錯誤,Unsupported media type-415。查了一下,原來,后端對請求的Content-type 設為了json, Access-Control-Request-Headers: content-type, 這時要把 content-type 設為json . xhr.setRequestHeader('Content-Type', ' application/json');
在設置請求頭的時候,還知道了原來第一個參數“Content-Type”, 是不區分大小寫的,寫成‘content-type’ 也是可以的。當然,設置請求頭還要注意以下問題:
1,它必須在open()方法之后,send()方法之前調用,否則會拋錯。
2,如果設置多個請求頭時,可以多次調用setRequestHeader(),后面的設置並不會覆蓋掉前面的設置,而是采用疊加的方式。
3, 兩個參數之間用逗號,隔開。 有時我不經意間寫成了分號:, 造成錯誤。
2,改完之后,發送請求,又報錯了 ,但這次是400 bad request, 400指的是請求無效(請求有語法問題或者不能滿足請求),也就是無法獲取到資源, 這主要是后台要求傳入的數據和前台我們傳入的數據不匹配,后台無法解析數據,進行查詢,從而返回數據。但我只傳遞了一個對象。網上搜了一個解決辦法:對我們要傳遞的數據進行json 序列。
var data = JSON.stringify({ "page": 0, "limit": 20, "shopId": 1 });
3, 再發送一次請求,終於請求成功。 代碼如下:
var xhr = new XMLHttpRequest(); var url ="http://192.168.1.89:8080/server/"; var data = JSON.stringify({ "page": 0, "limit": 20, "shopId": 1, "timeType": 3, }); xhr.open("POST", url ); xhr.setRequestHeader('Content-Type','application/json'); xhr.onload = function(){ console.log(xhr.responseText) // 這里要用xhr.respnseText 獲取數據,我經常給函數傳一個data參數,獲取數據,造成錯誤 } xhr.send(data)