button標籤新增onclick的事件會碰到什麼神奇的事情?

button標籤新增onclick的事件會碰到什麼神奇的事情?

前言

今天同事碰到一個問題,他在button上添加了點選事件,想要透過ajax請求後臺,透過成功回撥函式跳轉成功頁面。問題是後端可以收到請求,業務處理也正常,但是就是進不去成功回撥函式。可能有人已經知道為什麼了?但是並不是你想的那樣!

一、程式碼是這樣的

姓名
身份證號碼
手機號
//ajax是這樣的。請求引數什麼的都沒有問題 $。ajax({ type : “post”, async : true, data:“”,//引數沒問題, 我這裡就寫“”了 url : “${contextPath}/cxwy/underwriting”, success : function(data){ var resultCode = data。resultCode; if( resultCode == ‘success’ ){ window。location。href=“${contextPath}/View/page/cxwy/succress。jsp?sr=”+adviceCode; layer。closeAll(); }else if(resultCode == “fail”){ layer。closeAll(); var msg = data。resultMsg; layer。open({content:msg, btn: “確定”}); return; } } });

二、問題分析

思路一:

根據以往的經驗,第一時間,我覺得問題出在後端返回的資料型別上。假如後端返回的不是json資料型別,前端頁面透過data。resultCode取值肯定會有問題。

我的解決是ajax新增接收的資料型別dataType : ‘json’,後端添加註解@ResponseBody把後端返回資料型別轉為json,大功告成!前後端保持資料型別一致,並且都是json資料,心裡想著肯定沒問題了。

然後重新整理前端快取,前端打斷點,開始測試,結果還是一樣的問題,成功還是沒有進來,並且當前頁面地址後面還新增上了引數。有點神奇哈。

button標籤新增onclick的事件會碰到什麼神奇的事情?

思路二:

“事出反常必有妖”,透過查詢資料發現,onclick事件執行完畢以後,會執行瀏覽器的預設事件,button按鈕的預設型別是type=“submit” ,也就是會說,ajax執行的時候,還有一個form表單提交事件。

由於form表單的action屬性為空,那麼這個請求將由當前頁面的路徑來處理。而form表單預設是get請求,所有就出現上圖中的地址。

找到原因了,解決方法就非常多了~

方法一:

onclick事件中新增return false,取消瀏覽器預設事件。

方法二:

給button 新增type=“button”,這樣就不會有表單提交事件了。

方法三:

不用button標籤了, 換用span、div等。但是會影響到頁面的樣式,還需要再修改頁面的樣式,不推薦這種!!!

方法非常多,不一一列舉了,比如就用不用form標籤了。。。。。

喜歡的話,可以關注公眾號“莫非技術棧”,免費領取學習資源~