Ajax Call loop, Ajax jQuery - PullRequest
       3

Ajax Call loop, Ajax jQuery

3 голосов
/ 12 февраля 2012

Мне нужно и советы здесь.

У меня такая ситуация, когда я пытался получить данные JSON, подумал AJAX (используя jQuery).

Идея в том, что мне нужно больше данных, чем 1 или 2 Ajax Call, чтобы получить все данные, которые мне нужны.

Итак, мне нужно сделать несколько Ajax Calls, и я пытаюсь найти лучший способ сделать это (Лучшая практика).

Одна идея, которая пришла мне в голову первой, похожа на эту (у нее может быть какой-то синтаксический ошибку или даже что-то еще хуже, если сейчас искать логику):

var dataArr = {
    page:0,
    pageSize : 1000
};


var StoreData = [];

var getSomeData = function () {

    $.ajax({
        type : "GET",
        url : URL,
        data : dataArr,
        dataType : "json",
        error : OnLoadError,
        success :function(data, status){

            StoreData.push[data];
            if(data.length){
                dataArr.page = dataArr.page + 1
                getSomeData();
            }

        }
    });
};

Дополнительная информация:

Это может быть около 4-9 вызовов Ajax для получения всех данных (4000-9000 элементов).

Я протестировал pageSize : 1000 и отлично работает, поэтому я могу точно получить 1000 единиц за звонок.

Так что, если вы можете помочь мне с некоторыми советами, некоторыми изменениями в существующем или другом лучшем способе сделать это, или даже каким-то примером, я действительно ценю

Спасибо всем!

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

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

0 голосов
/ 12 февраля 2012

Прежде всего, вам нужно оптимизировать размер страницы.Определить его как 1000 - это простой способ.Если производительность приложения не важна, не читайте оставшуюся часть этого ответа:)

Я предлагаю метод проб и ошибок.Сделайте цикл for, попробуйте разные числа для размера страницы (например, 20, 50, 100, 500, 1000, 1500 и т. Д.).Затем регистрируйте количество запросов для каждого размера страницы и общее время для всех запросов.Сравните эти цифры и разумно выберите размер своей страницы.

Во-вторых, если вы можете подсчитать количество элементов, поступающих с сервера, вам, возможно, не придется отправлять ненужный запрос в конце.Предположим, вы получаете 4650 данных.Вы получаете 1000, + 1000, +1000, +1000 и +650.Если бы вы каким-то образом выяснили, что получаете меньше 1000, вы бы не отправили последний запрос, не так ли?Предположим, что формат ответа примерно такой:

<li class='item'>XXX</li>
// All list items 
<li class='item'>YYY</li>

Затем посчитайте количество li с помощью jquery, и если оно меньше размера вашей страницы, это означает, что вы получите все необходимые данные.

Наконец, если вы знаете, что ваша общая длина данных превышает 4000, вы можете отправить первые 4 запроса асинхронно.

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