jquery ajax超時設置


 

jquery ajax超時設置

 

var ajaxTimeoutTest = $.ajax({
  url:'',  //請求的URL
  timeout : 1000, //超時時間設置,單位毫秒
  type : 'get',  //請求方式,get或post
  data :{},  //請求所傳參數,json格式
  dataType:'json',//返回的數據格式
  success:function(data){ //請求成功的回調函數
    alert("成功");
  },
  complete : function(XMLHttpRequest,status){ //請求完成后最終執行參數
    if(status=='timeout'){//超時,status還有success,error等值的情況
       ajaxTimeoutTest.abort();
       alert("超時");
    }
  }
});

設置timeout的時間,通過檢測complete時status的值判斷請求是否超時,如果超時執行響應的操作。

 

如何等待ajax完成再執行相應操作

 

ajax廣泛應用於異步請求,對於大多數業務來說,這是十分方便的,但對於一些特殊的業務,ajax的異步性會起到相反的作用。

例如在ajax請求成功后,后續的操作需要依賴ajax執行成功后的相應操作。

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

// 根據 status 的狀態 進行后續操作
function(){
  if(status){
    // 后續操作
}  
}
復制代碼

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

因為 ajax 有個 async 屬性,該屬性默認為 true,表示 ajax 異步執行,而在進行 if 判斷的時候,ajax 的異步執行還沒完成,因此 status 的值仍然是 false。

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

1、將 ajax 的 async 屬性設置為 false,表示 ajax 同步執行。

復制代碼
// 聲明一個表示狀態的全局變量 status
var status = false;
// ajax
$.ajax({
    url:"/checkUsername",
    type:"post",
    // ajax 同步執行
    async:false,
    success:function(){
        status = true;  
}  
});

// 根據 status 的狀態 進行后續操作
function(){
  if(status){
    // 后續操作
}  
}
復制代碼

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

2、利用 jquery 的 when().done 函數 等待 ajax 執行結束之后再進行后續操作。

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

// 根據 status 的狀態 進行后續操作
function(){
  // myajax 請求完畢時執行
  $.when(myajax).done(function(){
      if(status){
        // 后續操作
      }  
    }) ;
}
復制代碼

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

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM