Ajax的post表單,不在url後接一大串參數鍵值對的方法
$(‘#loginForm‘).on(‘submit‘,function (ev) { //阻止表單參數附在url後面 ev.stopPropagation(); ev.preventDefault();
再在下面寫上Ajax方法
即可阻止url後接一大串鍵值對參數
stopPropagation()方法
該方法將停止事件的傳播,阻止它被分派到其他 Document 節點。在事件傳播的任何階段都可以調用它。註意,雖然該方法不能阻止同一個 Document 節點上的其他事件句柄被調用,但是它可以阻止把事件分派到其他節點
preventDefault() 方法
阻止元素發生默認的行為(例如,當點擊提交按鈕時阻止對表單的提交)
以上,但這樣做有一個問題,這樣的話,表單的數據將不以formdata的形式傳值,而是request payload
而request payload在servlet中是獲取不到的
原因:post請求的Content-Type為application/x-www-form-urlencoded,參數是在請求體中,即上面請求中的Form Data。
而請求的Content-Type為text/plain;charset=UTF-8,而請求表單參數在RequestPayload中
這樣的話,有一個解決方案,即為修改請求的Content-Type
在Ajax中可以這樣寫:
//阻止附在url後面的話,參數不會再formdata中,而是request payload中,故改請求頭的類型 contentType:"application/x-www-form-urlencoded",
如此
即可在servlet中用request.getParameter()方法來獲取參數值了
以上是花了蠻多時間,參考他人博客和網上資料得出的解決方法
參考鏈接如下:
不讓url變化的參考:https://segmentfault.com/q/1010000007157022?_ea=1254896
request payload問題的解決參考:https://www.2cto.com/kf/201701/589783.html
Ajax方法參數的詳解:https://www.cnblogs.com/tylerdonet/p/3520862.html
Ajax的post表單,不在url後接一大串參數鍵值對的方法