Позвольте мне немного объяснить мой код (извините, если что-то не так, я только что написал этот пример с нуля, он очень близок к тому, что у меня сейчас есть).
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 (перенаправление удалено и вызов ajax заменен на консольный журнал для скрипки)
http://jsfiddle.net/cM5PX/
HTML представляет собой простую форму с полями ввода имени друга и адреса электронной почты друга.
JS имеет функцию каждой функции, которая, если имя и связанный адрес электронной почтыиметь значения, он запускает вызов ajax.
Мне нужен способ для выполнения этих вызовов ajax (может быть 1 цикл, может быть 15), а затем, после того как все они завершены, перенаправить на новую страницу.
Нынешний способ, которым я это делаю, ужасен, так как все вызовы ajax не заканчиваются до перенаправления страницы.
Что я могу сделать, чтобы сделать это лучше?Он должен быть защищен от ошибок и ТОЛЬКО перенаправлен после завершения всех вызовов ajax (успех или ошибка, это не имеет значения - просто нужно перенаправить после завершения).
Я пытался использовать async: false
но это, кажется, не имеет значения.
Я думал о том, чтобы поместить счетчик в каждую функцию и счетчик в функции успеха ajax, и если они оба совпадают, тогда сделайте перенаправление, ноЯ ищу более опытное руководство.