Страница ожидает завершения всех вызовов AJAX перед обновлением - PullRequest
6 голосов
/ 30 ноября 2011

Иногда на своей странице я делаю много вызовов ajax одновременно, одновременно.Идея состоит в том, что каждый элемент обновляется по мере того, как его данные становятся доступными (я не хочу ставить вызовы в очередь).Однако иногда веб-страница не будет обновлять какие-либо элементы, пока все вызовы Ajax не будут завершены.

Например, я обновляю четыре изображения подряд - каждое изображение имеет свой собственный обратный вызов ajax, который обновляет свой источник, как только эти данные становятся доступными;код выглядит примерно так:

for (var i = 0; i < numPictures; i++ ){
  Dajaxice.Images.load_picture(callback_function, {'pictureId': i});
}

функция callback_function помещает изображение в свой элемент пользовательского интерфейса после его готовности:

imgSnippet = '<img src="' + data.img_source + '"/>'
$("#" + data.container_id).html(imgSnippet);

(данные - это объекты, которые эта функция получила от сервера)

Я использую (как вы можете видеть в примере) dajax (плагин для django) для функциональности AJAX.На стороне сервера у меня есть Apache (2.2), работающий с django 1.3 через mod_wsgi.

При выполнении, даже если некоторые вызовы ajax заканчиваются раньше (я вижу это на моем сервере), страница не будет обновлять никакие элементыдо последнего звонка.

Есть предложения?

Спасибо,

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Вы можете решить эту проблему, обернув содержимое функций обратного вызова вызовом setTimeout с тайм-аутом 0 или 1 миллисекунду. Это освобождает систему для обновления экрана.

1 голос
/ 30 ноября 2011

Я предлагаю создать массив для хранения всех изображений и создать новую функцию, которая будет отображать изображения, когда вы получили их все с сервера, и в обратном вызове foreach image увеличить q предопределенный счетчик, когда счетчик равен числуизображений отображают фотографии и обнуляют счетчик, и вы можете поставить загрузку на место, где изображение должно быть до тех пор, пока все из них не будет с вами Извините, я не написал ваш код, но я на мобильном телефоне, возможно, я опубликую его позже для васесли мой ответ не ясен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...