問題發生環境
在使用jQuery的ajax函數時候,data傳入一個字符串,但是請求的數據後尾出現了一個冒號(:),但是傳入object類型調用請求正常。
請求截圖:
ajax方法截圖:
調試截圖:
傳入object類型調用截圖
問題分析
1、爲什麼會出現冒號情況
因爲使用的是谷歌瀏覽器(Chrome),在開發者工具的From Data中查看有兩個模式:
- view parsed(解析視圖),出現冒號
- view source(查看源代碼),沒有冒號
2、爲什麼視圖解析會將字符解析成鍵值對
這個還要從jQuery的ajax方法說起,其中影響的是兩個參數:
1、data參數,會默認轉換成鍵值對形式,但是字符在形式中不轉換。發現在解析視圖中還是被解析的,可是查看源代碼模式是沒有實際添加的冒號。這說明只是顯示的情況下看到,但是實際傳輸確實沒有的。
2、contentType 參數,因爲默認application/x-www-form-urlencoded: 窗體數據被編碼爲名稱/值對。這是標準的編碼格式。所以被將被解析視圖所解析。
3、爲什麼請求狀態碼是415
這是因爲我弄錯了接口所允許的Content-type,不允許application/x-www-form-urlencoded,應該是application/json,所以這是我自己程序的問題。。。
結論
1、這個冒號的出現是因爲contentType的默認是application/x-www-form-urlencoded,所以它將被解析成鍵值對展示,但是字符串進去是沒有改變的,但是展示的時候能看見。
2、要避免這個問題就需要將contentType改爲application/json。當然修改了這個參數你的後臺接口程序必須支持這個請求類型。
3、對於跨域請求,當contentType改爲application/json,將觸發瀏覽器發送一個預檢OPTIONS請求到服務器。而這個請求後臺接口必須支持。
4、這個是個人對於這個問題的一點個人看法,要是有什麼問題請在下方留言,共同進步,十分感謝~