學習好文章
如圖所示,這只是一個很簡單的登錄請求。 剛看到這個請求返回狀態時,也是覺著很詫異。經過確認參數等情況,發現并沒有什么異常,且進行第二次登錄操作時會返回正常。
排查思路:
發現url在第一次登錄操作后由原來的 [*/login.html]更改為[*/login.html?email=123%40QQ.com&passWord=123123]。
這是一個很明顯的get請求方式,而login操作請求是由DOM節點$(‘#login-action’)通過post方式實現的。
可以肯定的是,有個操作將post請求干擾了。分析排查后發現是由于form標簽導致的。
場景再現:
HTML:
<form class="login-area well"> <header class="login-title">lovejavascript</header> <div class="form-group col-sm-12"> <label class="control-label col-sm-2">email:</label> <input type="text" class="form-control col-sm-8" name="email"/> </div> <div class="form-group col-sm-12"> <label class="control-label col-sm-2">password:</label> <input type="password" class="form-control col-sm-8" name="password"/> </div> <div class="form-group text-center"> <button class="btn btn-JS:$('#login-action').bind('click', function(){ $.post('/login/loguser', function(){ //具體的執行.... });});至于原因:
僅僅是由于之前為了在輸入賬號時讓瀏覽器進行自動補全,而將原先的div更換為了form,而不巧的是之前的登錄事件源使用的是button。
而至于為什么status = canceled,是由于在提交時,form action與綁定于button上的click事件會同時觸發。form action將表單內容以serach的形式追加至當前url上,url變更后會導致頁面重新加載, 而這正是導致post請求在執行后就被終止的原因。
總結:
1.在URL變更后,會對當前正在執行的Ajax進求進行中止操作。中止后該請求的狀態碼將為canceled 2.在使用到ajax的時候,盡量不要在form內使用button進行提交,這些特殊的標簽在特定的情況下往往會有讓你迷茫的時候。
新聞熱點
疑難解答