亚洲色蝴蝶中文娱乐网,在线亚洲欧美一区二区中文字幕,无人视频在线观看视频高清视频,99午夜国产精品一区二区,人人妻人人爽人人狠狠

如何等待ajax完成再執(zhí)行相應(yīng)操作

時(shí)間:2020-01-14 16:23:33 類型:JS/JQUERY
字號:    

ajax廣泛應(yīng)用于異步請求,對于大多數(shù)業(yè)務(wù)來說,這是十分方便的,不過對于一些特殊的業(yè)務(wù),ajax的異步性卻會起到相反的作用。比如在ajax請求成功后,我們接下來的操作需要依賴ajax執(zhí)行成功后的相應(yīng)操作。

// 聲明一個(gè)表示狀態(tài)的全局變量 status
var status = false;
// ajax
$.ajax({
    url:"/checkUsername",
    type:"post",
    success:function(){
        status = true;  
}  
});

// 根據(jù) status 的狀態(tài) 進(jìn)行后續(xù)操作
function(){
  if(status){
    // 后續(xù)操作
}  
}

  以上代碼對于不是很清楚ajax運(yùn)行原理的朋友來說,看似沒什么毛病,但其實(shí) status 的值在ajax 請求成功之后進(jìn)行 if 判斷的時(shí)候值仍然為 false。

  因?yàn)?ajax 有個(gè) async 屬性,該屬性默認(rèn)為 true,表示 ajax 異步執(zhí)行,而在進(jìn)行 if 判斷的時(shí)候,ajax 的異步執(zhí)行還沒完成,因此 status 的值仍然是 false。

  若要保證 status 的值是在 ajax 執(zhí)行完成之后的最終值,有兩種辦法:

  1、將 ajax 的 async 屬性設(shè)置為 false,表示 ajax 同步執(zhí)行。

// 聲明一個(gè)表示狀態(tài)的全局變量 status
var status = false;
// ajax
$.ajax({
    url:"/checkUsername",
    type:"post",
    // ajax 同步執(zhí)行
    async:false,
    success:function(){
        status = true;  
}  
});

// 根據(jù) status 的狀態(tài) 進(jìn)行后續(xù)操作
function(){
  if(status){
    // 后續(xù)操作
}  
}


  但是這種方式在有些情況下并不好用。推薦第二種方式。

  2、利用 jquery 的 when().done 函數(shù) 等待 ajax 執(zhí)行結(jié)束之后再進(jìn)行后續(xù)操作。

// 聲明一個(gè)表示狀態(tài)的全局變量 status
var status = false;
// ajax
myajax = $.ajax({
    url:"/checkUsername",
    type:"post",
    success:function(){
        status = true;  
}  
});

// 根據(jù) status 的狀態(tài) 進(jìn)行后續(xù)操作
function(){
  // myajax 請求完畢時(shí)執(zhí)行
  $.when(myajax).done(function(){
      if(status){
        // 后續(xù)操作
      }  
    }) ;
}

此時(shí)的 status 是在 ajax 執(zhí)行完成后被重新賦值后的 status ,值為 true。


原創(chuàng)來自:https://www.cnblogs.com/elementplay/p/10789600.html

<