Jquery ajax() async false
У меня проблема.
for(a=1;a<10;a++){
$(".div").append("<div id="+a+"></div>")
$.ajax({
url: "file.php",
data: "a="+a,
type: "POST",
async: false,
success: function(data) {
$("#"+a).html(data);
}
});
}
$("div").click(function(){
alert("it works");
});
проблема:
я не помещал туда async: false
данные из file.php были только в последнем div, поэтому с id 9
но теперь есть async: false
- поэтому данные находятся в каждом div, так что это хорошо
но если я хочу щелкнуть, когда он загружается ajax, он не работает (только после завершения всех ajax-es)
как решить эту проблему? (возможно, ложь заключается в том, что я использую ajax. Я могу использовать getJSON ect..)
спасибо за помощь
Ответы
Ответ 1
Если вы хотите, чтобы пользователь мог использовать интерфейс во время выполнения вызова ajax, вы должны изменить async
на true
. Джеймс Аллардис отметил также, что в этом случае вам нужно использовать закрытие javascript, чтобы сохранить значение исходного id
, когда возвращается вызов ajax. Для получения дополнительной информации о закрытии javascript проверьте how-do-javascript-closures-work, действительно хороший вопрос, найденный здесь в stackoverflow.
for(id = 1; id < 10; id++){
$(".div").append("<div id='" + id + "'></div>");
(function(id) {
$.ajax({
url: "file.php",
data: "a=" + id,
type: "POST",
async: true,
success: function(data) {
$("#"+ id).html(data);
}
});
}(id));
}
Ответ 2
Хорошим решением для этого является использование рекурсивной функции.
function appendDivs(limit, count) {
count = count || 1;
if (count <= limit) {
$(".div").append("<div id=" + count + "></div>");
$.ajax({
url: "file.php",
data: "a=" + count,
type: "POST",
async: true,
success: function(data) {
$("#" + count).html(data);
appendDivs(limit, count + 1);
},
error: function(e) {
alert('Error - ' + e.statusText);
appendDivs(limit, count + 1);
}
});
} else {
return false;
}
}
appendDivs(10);