Hãy để tôi giải thích mã của tôi một chút (Xin lỗi nếu có điều gì đó sai, tôi vừa viết ví dụ này từ đầu, nó rất gần với những gì tôi hiện có).Nhiều cuộc gọi ajax bên trong một hàm each() .. sau đó làm điều gì đó một khi TẤT CẢ chúng được hoàn tất?
HTML:
<form id="form">
<!-- Friend 1 -->
Name 1: <input type="text" name="friendName1" id="friendName1" class="friendName" value=""><br />
Email 1: <input type="text" name="friendEmail1" id="friendEmail1" value=""><br /><br />
<!-- Friend 2 -->
Name 2:<input type="text" name="friendName2" id="friendName2" class="friendName" value=""><br />
Email 2:<input type="text" name="friendEmail2" id="friendEmail2" value=""><br /><br />
<!-- Friend 3 -->
Name 3:<input type="text" name="friendName3" id="friendName3" class="friendName" value=""><br />
Email 3:<input type="text" name="friendEmail3" id="friendEmail3" value=""><br /><br />
<!-- Friend 4 -->
Name 4:<input type="text" name="friendName4" id="friendName4" class="friendName" value=""><br />
Email 4:<input type="text" name="friendEmail4" id="friendEmail4" value=""><br /><br />
<!-- Submit -->
<input name="submit" type="submit" value="Submit">
</form>
JS:
$("#form").submit(function(){
$(".friendName[value!='']").each(function(){
var idEmail = 'friendEmail' + $(this).attr("id").replace('friendName','');
if($("#"+idEmail+"[value!='']").length > 0){
var name = $(this).val();
var email = $("#"+idEmail).val();
// Submit the ajax request
$.ajax({
type: 'POST',
url: 'ajax/url',
data: {
name: name,
email: email
},
success: function(json) {
// Log a console entry if our ajax request was successful
console.log(name + " was submitted via ajax");
}
});
}
});
// Redirect the user to the thank you page
setTimeout(function() { window.location= '/thanks'; }, 2000);
});
JSFiddle (redirect loại bỏ và ajax gọi thay thế bằng giao diện điều khiển log cho fiddle)
HTML là một biểu mẫu đơn giản, với tên người bạn và các trường nhập email của bạn bè.
JS có một chức năng, nếu tên và email được liên kết có giá trị, nó sẽ thực hiện cuộc gọi ajax.
Tôi cần một cách để các cuộc gọi ajax này chạy (có thể có 1 vòng lặp, có thể là 15) và sau khi hoàn tất, hãy chuyển hướng đến một trang mới.
Cách hiện tại tôi đang thực hiện điều đó thật khủng khiếp, vì tất cả cuộc gọi ajax đều không kết thúc trước khi trang chuyển hướng.
Tôi có thể làm gì để cải thiện điều này? Nó cần phải được đánh lừa bằng chứng và chỉ chuyển hướng một khi tất cả các cuộc gọi ajax đã hoàn thành (thành công hay lỗi, nó không quan trọng - nó chỉ cần chuyển hướng khi nó đã hoàn thành).
Tôi đã thử sử dụng async: false
nhưng có vẻ như không tạo sự khác biệt.
Tôi đã nghĩ đến việc đặt bộ đếm trong mỗi chức năng và bộ đếm trong hàm thành công ajax và nếu cả hai khớp nhau, thì thực hiện chuyển hướng, nhưng tôi đang tìm một số hướng dẫn có kinh nghiệm hơn.
Và nó sẽ khóa giao diện người dùng. –
Chỉ cần cập nhật câu hỏi của tôi, tôi đã thử sử dụng async: false nhưng dường như nó không tạo ra sự khác biệt và tôi thực sự không muốn trình duyệt đóng băng trong khi các cuộc gọi đang được thực hiện. – Latox
Ah ok ... hãy để tôi đào một chút. –