本篇文章主要的解釋了關於js中ajax執行順序解決的問題,現在讓我們來看看這篇關於ajax的執行順序解決的文章吧
在JS中我們會遇到執行順序的問題,尤其是AJAX的執行順序,js中預設的執行順序是從上往下執行。
看下面的一段代碼
callback:function(value, validator, $field){$.ajax({ url : window.ctx+"/sys/manager/validateLoginName", data:{loginName:value}, type : 'post', dataType : "json", async:true, success: function(result){ if(result!=null) globalVariable.flag=result; alert(1) }}); alert(2) if(globalVariable.flag!=1)return true; if(globalVariable.flag==1)return false; }
由於這裡的AJAX是非同步請求,所以在瀏覽器中會先彈出2在彈出1
這樣就會出現問題 假如flag預設是0,在執行完AJAX之後會變成1,那麼if語句其實是用0去做的判斷,與我們的目的不相符,我們想要的是用AJAX執行完之後賦值的flag去做if判斷(想看更多就到topic.alibabacloud.comAJAX開發手冊欄目中學習)
解決:
第一種方法
之所以出現這樣的問題是因為AJAX採用了非同步請求,所以如果我們想先彈出1再彈出2隻需要把AJAX改為同步即可,也就是將async改為false
這樣如果AJAX沒有執行完頁面會出現假死狀態,停止往下執行,只有當AJAX回調走完以後才會往下走
當然我們使用AJAX就是為了非同步,所以上面的方法是遇到特殊的需要了可以這樣處理
第二種方法
第二種辦法是比較常用的
例如下面一段代碼
function test(){$.ajax({ url : window.ctx+"/sys/manager/addUserRole", data:formData, type : 'post', dataType : "json", processData:false, contentType:false, success: function(result){ if(result!=null){ testCallback(); }}}); test2(); }function testCallback(){alert(1)}function test2(){alert(2)}
AJAX是非同步,我們希望先彈出1再彈出2我們只需要把test2放在test的回呼函數中即可
像這樣
function test(){$.ajax({ url : window.ctx+"/sys/manager/addUserRole", data:formData, type : 'post', dataType : "json", processData:false, contentType:false, success: function(result){ if(result!=null){ testCallback(); }}});}function testCallback(){alert(1)test2()}function test2(){alert(2)}
本篇文章到這就結束了(想看更多就到topic.alibabacloud.comAJAX使用手冊欄目中學習),有問題的可以在下方留言提問。