Получать контент из разных html-файлов по циклу через json [duplicate]

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

15
задан Flimzy 20 August 2015 в 00:45
поделиться

3 ответа

Используйте функцию jQuery $ .when (), чтобы запустить что-то, когда закончились все вызовы ajax:

jQuery.when docs

var async1 = $.ajax({//ajax call 1
    url:page1.php,
    success: function(data1){
        //do something with data1
    }
});

....

var async2 = $.ajax({//ajax call 2
    url:page2.php,
    success: function(data2){
        //do something with data2
    }
});

$.when(async2, async1).done(function(result2, result1) {
    ... do this when both are successful ...
});

Добавлено в ответ на вопросы:

Если у вас есть куча вызовов ajax, вы можете использовать «apply» следующим образом:

var results = [];
results.push(async1);
results.push(async2);
... for all the results ...

$.when.apply(this, results).done(function() {
    ... use 'arguments' array to get results ...
});
34
ответ дан Zenexer 20 August 2018 в 17:58
поделиться
  • 1
    хорошо, не знал об этом, сначала то, что было вызвано в моем сознании, было api.jquery.com/category/deferred-object – dmi3y 22 January 2013 в 20:16
  • 2
    «когда» просто строит новую, отложенную поверх всех ее параметров, поэтому все нормальные отложенные методы работают. Единственная сложная часть состоит в том, что она терпит неудачу, когда первый из них терпит неудачу, а другие могут быть неполными. «done» выполняется только в том случае, если все выполнено. (Это как «fail» - это «или» и «сделано», поскольку успех - это «и»). – Lee Meador 22 January 2013 в 20:19
  • 3
    это выглядит многообещающим, var async1 должно быть глобальным по масштабам, не так ли? – Landon 22 January 2013 в 20:24
  • 4
    отлично, что, если вызов async2 находится в цикле, который выполняет динамическое количество раз? В этом случае у меня будет только два экземпляра (переменные) в моем коде с функциями ajax, но я бы хотел, чтобы он выполнял, скажем, 5 аякс-вызовов перед выполнением. Что такое синтаксис для $.when в этом случае? – Landon 22 January 2013 в 20:42
  • 5
    Я расширил решение в своем первоначальном вопросе выше для будущих читателей. Спасибо Ли за вашу помощь. – Landon 25 January 2013 в 01:31

Простым решением будет использование модуля PreloaderQ

https://www.npmjs.com/package/preloaderq

Использовать как показано ниже

var preloader = new PreloaderQ()
preloader.setEmptyCallback(function(){
    //all tasks are finished
})

preloader.setFirstTaskCallback(function(){
    //started first task
})

preloader.enqueueTask('ajax1')

$.ajax({//ajax call 1
    url:page1.php,
    success: function(data1){
        prealoader.dequeueTask('ajax1')
        //do something with data1
    }
});

preloader.enqueueTask('ajax2')

$.ajax({//ajax call 1
    url:page2.php,
    success: function(data2){
        prealoader.dequeueTask('ajax2')
        //do something with data2
    }
});

Вызов emptycallback после того, как оба завершены

0
ответ дан Jayadeep KM 20 August 2018 в 17:58
поделиться

Это, вероятно, можно сделать очень похоже на то, что вы уже предложили.

Сначала создайте глобальные переменные var sleep = true и var request_count = 0. Затем запустите таймер, который проверяет request_count на общее количество запросов каждую секунду или около того. Затем ваши функции успеха могут увеличивать request_counter, а затем начинать цикл до sleep == false. Затем, когда функция мониторинга, запущенная с помощью таймера, обнаруживает request_count == TOTAL_REQUESTS, она устанавливает sleep = false, и все ваши функции успеха продолжают об их бизнесе в этой точке.

0
ответ дан Scott S 20 August 2018 в 17:58
поделиться
  • 1
    можете ли вы уточнить, что вы подразумеваете под циклом, пока sleep == false? как занятый цикл? вы имеете в виду что-то вроде while(request_count<TOTAL_COUNT) busywork=1;. Я не думаю, что занятая петля - хорошая идея. Я ошибаюсь? – Landon 22 January 2013 в 20:22
  • 2
    Да, это то, что я предлагал. Но вы правы, если вы можете избежать этого, что было бы лучше, и похоже, что предложение Ли - это правильный путь. – Scott S 22 January 2013 в 20:40
Другие вопросы по тегам:

Похожие вопросы: