#ajax #jquery #jqgrid
#ajax #jquery #jqgrid
Вопрос:
$(document).ready(function() {
$("#list1").jqGrid({
url: 'example1.php',
/*balabala...*/
gridComplete: function() {
}
});
$("#list2").jqGrid({
url: 'example2.php',
/*balabala...*/
gridComplete: function() {
}
});
/*I want to do something here, but the above grids must be both complete first.*/
Something...
});
Как мне следует поступить? Спасибо!
Ответ №1:
Самый простой способ — поместить ваше «что-то» в gridComplete
обратные вызовы, но заставить два обратных вызова проверить, что другой завершен. Что-то в этом роде:
function do_something_wonderful() {
// This is the awesome stuff that you want to
// execute when both lists have loaded and finished.
// ...
}
var one_done = false;
function done_checker() {
if(one_done) {
// The other one is done so we can get on with it.
do_something_wonderful();
}
one_done = true;
}
$("#list1").jqGrid({
//blah blah blah
gridComplete: done_checker
});
$("#list2").jqGrid({
//blah blah blah
gridComplete: done_checker
});
Это прекрасно распространяется на более чем два списка с парой небольших изменений:
- используйте
var how_many_done = 0;
вместоone_done
. - Сделайте
how_many_done;
вместоone_done = true;
и переместите его в началоdone_checker
. - Замените
if(one_done)
наif(how_many_done == number_of_tasks)
гдеnumber_of_tasks
указано, сколько задач AJAX у вас есть.
Общая версия будет выглядеть примерно так:
var number_of_tasks = 11; // Or how many you really have.
var how_many_done = 0;
function done_checker() {
how_many_done;
if(how_many_done == number_of_tasks) {
// All the AJAX tasks have finished so we can get on with it.
do_something_wonderful();
}
}
Еще лучшая версия завершила бы состояние закрытием:
var done_checker = (function(number_of_tasks, run_when_all_done) {
var how_many_done = 0;
return function() {
how_many_done;
if(how_many_done == number_of_tasks) {
// All the AJAX tasks have finished so we can get on with it.
run_when_all_done();
}
}
})(do_something_wonderful, 11);
Комментарии:
1. @Cynial: Я добавил еще одно обновление, которое изолирует дополнительное состояние, хотя это может быть немного чересчур.
2. Не говорите так, это действительно помогает мне! 🙂
3. @Cynial: Я только что добавил еще одну опцию, которая может оказаться полезной, или это может быть больше защиты / сообразительности, чем вам нужно (т. Е. «многовато»). Рад быть полезным.
Ответ №2:
В данный момент вы должны использовать отложенные объекты jquery.