1. 程式人生 > >Ajax的post表單,不在url後接一大串參數鍵值對的方法

Ajax的post表單,不在url後接一大串參數鍵值對的方法

url efault opp 解決方案 數值 .cn 寫上 prevent sub

$(‘#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後接一大串參數鍵值對的方法