Подтвердить что ты не робот

Несколько вызовов ajax в одно и то же время

Я разработал несколько веб-сайтов, и я всегда спотыкаюсь на одну и ту же точку: несколько вызовов ajax. У меня есть главная страница, где все содержимое загружается асинхронно. Когда страница загружена, есть четыре НЕЗАВИСИМЫХ вызова, которые "рисуют" страницу по областям (сверху, влево, вправо и снизу), и когда они загружаются, я показываю пользователю типичные спины ajax. Поэтому, когда запрос получен браузером, я выполняю обратный вызов, а разные области рисуются в разное время. Дело в том, что ответ для сервера иногда смешивается, я имею в виду, что ответ сверху рисуется влево или наоборот.

Я пробовал некоторые решения, такие как создание метки времени в каждом запросе, чтобы указать браузеру и серверу, что каждый запрос отличается.

Также я попытался настроить некоторые параметры кеша на сервере, в случае.

Единственный способ, в котором работы включали запрос2 в обратном вызове и т.д.

Кто-нибудь знает правильный способ сделать это или когда-либо избил эту проблему? Я не хочу делать прикованный запрос.

Спасибо

Вот пример того, что я имею в виду:

$(document).ready(function() {

$.get('/activity',Common.genSafeId(),function(data){$('#stream').html(data);$("#load_activity").addClass("empty");});
$.get('/messages',Common.genSafeId(),function(data){$('#message').html(data);$("#load_messages").addClass("empty");});
$.get('/deals',Common.genSafeId(),function(data){$('#new_deals_container').html(data);$("#load_deal").addClass("empty");});
$.get('/tasks',Common.genSafeId(),function(data){$('#task_frames').html(data);$("#load_task").addClass("empty");});});

И html - это простой jsp с четырьмя контейнерами, каждый с другим идентификатором.

4b9b3361

Ответ 1

CLOSURES

Закрытие сначала немного раздувается. Это функция javaScript и несколько других современных компьютерных языков.

Закрытие формируется исполняемым экземпляром функции, которая имеет внутреннюю функцию (обычно это анонимный обработчик события или именованный метод), который нуждается в доступе к одной или нескольким внешним переменным (т.е. переменным, находящимся внутри внешней функции, но снаружи внутренняя функция). Разумная вещь заключается в том, что внутренняя функция сохраняет доступ к внешним переменным, даже если внешняя функция завершена и возвращена во время выполнения внутренней функции!

Кроме того, переменные, захваченные замыканием, доступны только для внутренних функций, а не для более благоприятной среды, которая привела к замыканию. Эта функция позволяет нам, например, создавать классовые структуры как с частными, так и с публичными членами даже в отсутствие языковых ключевых слов "Public" и "Private".

Закрытия становятся возможными благодаря использованию внешними переменными внешних функций, подавляющих сбор мусора javaScript, которые иначе разрушали бы внешнюю функциональную среду в некоторой неопределенной точке после завершения.

Важность закрытия для хорошего, аккуратного программирования javaScript не может быть перенапряжена.

В приведенном ниже коде функция getData() формирует при каждом вызове замыкание, улавливающее id1 и id2url), которые остаются доступными для анонимного обработчика ответа ajax (третий аргумент $.get).

$(document).ready(function() {

    function getData(url, id1, id2) {
        $.get(url, Common.genSafeId(), function(data) {
            $(id1).html(data);
            $(id2).addClass("empty");
        });
    }

    getData('/activity', '#stream', '#load_activity');
    getData('/messages', '#message', '#load_messages');
    getData('/deals', '#new_deals_container', '#load_deal');
    getData('/tasks', '#task_frames', '#load_task');

});

Таким образом, вместо того, чтобы писать четыре отдельных обработчика, мы используем способность языка формировать замыкания и вызывать одну и ту же функцию getData() четыре раза. При каждом вызове getData() формирует новое замыкание, которое позволяет обработчику ответа $.get(который называется асинхронно, когда сервер отвечает), чтобы адресовать его элементы DOM.

Ответ 2

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