2015-06-11 44 views
2

我試圖檢查一些電子郵件地址是否在網站上註冊或者沒有使用cURL功能。逐個循環ajax請求並逐個顯示結果?

所以在這種情況下,我有3 textarea元素。第一個包含電子郵件列表,第二個包含實時電子郵件(表明電子郵件已註冊),第三個包含未註冊的電子郵件。然後有一個名爲「Check」的按鈕,如果用戶點擊它,那麼它會一個接一個地發出一個AJAX請求,並且一個接一個地顯示結果,而不是一次發送多個AJAX請求(async: true),或者一個接一個地發送AJAX請求, (async: false)結束時的結果。

問題如果我使用async: true我的瀏覽器會崩潰的大列表,如果我使用async: false我不知道我的應用程序是否正在運行,因爲它顯示請求結束時的結果,即使請求是一個後一。

然後,讓我的問題很簡單,這裏是我的代碼。

$("div#check").click(function(){ 
    //Assume i just grab email lists from text area and put in array 
    var mail_lists_clean = ["[email protected]", "[email protected]", "[email protected]"]; 
    var promises = []; 

    $.each(mail_lists_clean, function(index, value){ 
     var promise = $.ajax({ 
      method: "POST", 
      url: "valid_check.php", 
      //cache: false, 
      async: false, 
      data: { 
       email: value 
      } 
     }).success(function(data) { 
      if (data == "live") { 
       //append email to second textarea 
      } 
      else { 
       //append email to third textarea 
      } 
     }); 
     promises.push(promise); 
    }); 

    $.when.apply($, promises)done(function() { 
     alert("All Request done!"); 
    }).fail(function() { 
     console.log("error"); 
    }); 
}); 

任何人都可以幫助我一個接一個地發出AJAX請求並且一個接一個顯示結果嗎?請糾正我上面的代碼。謝謝。

+2

如果你在使用巨大的列表時崩潰,那麼不要使用巨大的列表,分頁 –

回答

1

要通過一個

你需要遞歸調用在$.ajaxsuccess回調函數使AJAX調用之一。

function ProcessEmailList(mail_list) { 
    // process one email at a time 
    var value = mail_list.pop(); 

    // if there is email in the array 
    if (value) { 
    $.ajax({ 
     method: "POST", 
     url: "valid_check.php", 
     async: false, 
     data: { 
     email: value 
     } 
    }).done(function(data) { 
     if (data == "live") { 
     //append email to second textarea 
     } else { 
     //append email to third textarea 
     } 

     // recursion call, process rest of the email 
     ProcessEmailList(mail_list); 
    }).fail(function() { 
     console.log("error"); 
    }); 
    } else { 
    // no more email in the array, we have processed all 
    alert("All Request done!"); 
    } 

}; 

$("div#check").click(function() { 
    //Assume i just grab email lists from text area and put in array 
    var mail_lists_clean = ["[email protected]", "[email protected]", "[email protected]"]; 
    ProcessEmailList(mail_lists_clean); 
}); 
-1

爲什麼不能由某個字符分隔一個Ajax請求通過所有emailadresses一次,並將結果傳回?這種方式長的地址列表不會是一個問題,它會爲您解決處理哪個請求和哪個請求不是什麼麻煩很多麻煩。這對性能也會更好。