最近在作項目時,有一個按鈕是由a標籤作成的,點擊這個按鈕時,會發送一個異步請求。當時手抽,不知道咋給它加了個href屬性,而且沒有給它值。代碼相似以下:javascript
<a id="alink" href="">點我吧</a>
異步請求代碼相似以下:
html
$(function(){ $('#alink').click(function(){ $.ajax({ url: "http://localhost:31296/home/handle", type: "get", data: { callback: "?"}, dataType: "jsonp", beforeSend: function(){ alert(1); }, success: function(data){ alert(data.status); }, error: function(a, b, c){ alert(b); } }); }); });
結果當點擊該按鈕的時候,項目中瀏覽器沒有任何反應,而且頁面還自動刷新了。在chrome瀏覽器中調試的時候發現,該請求沒法進入success方法。打開chrome瀏覽器的network這一項並找到該請求,如圖所示:java
在請求報文頭Request Headers這個地方出現了一個警告:provisional headers are shown,另外在標記1的地方,該請求也有可能顯示爲紅色,表示該請求的資源不存在或被取消了。查了下資料,這個警告的意思是該請求的資源會被屏蔽掉。由於對該資源的請求並無真的發生,header裏顯示的信息是僞信息,直到服務器有信息返回,這個header才被更新爲真實的。但也有可能上面全部的一切並不會發生,由於它被屏蔽掉了。這個變故讓我糾結了半天,最後一點點的去排錯,才知道原來是href屬性值形成的。當href屬性爲空時,會跳轉刷新當前頁面,這個請求無疾而終,被屏蔽掉了。給href屬性加個值,讓它不跳轉。ajax
<a id="alink" href="javascript:void(0);">點我吧</a>
a標籤href屬性的值的幾種特殊狀況:chrome
當href=""時,默認值爲當前頁面地址,點擊時會刷新頁面(不設置target值的狀況下);json
當href="#"時,跳轉到當前頁面的開頭處,頁面不會刷新,至關於scrollTo(0, 0);segmentfault
當href="javascript:void(0);"時,頁面不跳轉,也不滾動。瀏覽器
大意會出錯,之後當謹記!服務器