Ajax Call висит в JQuery

0

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

var i = 0;
var flagArray = new Array(data.length);
while (i < data.length) {
    if (flagArray[i] == 'done') {
        i++;
        console.log(i);
    }
    if (flagArray[i] != 'fired') {
        flagArray[i] = 'fired';
        $.get('commonCore/templates/' + data[i].templateHtml, function (html) {
            console.log(data[count].classSelect, i);
            var filterTemplate = Handlebars.compile(html);
            replaceFilterTemplate(filterTemplate, data[i].classSelect);
            flagArray[i] = 'done';
        });
    }
}

данные json:

[
    {
        "templateHtml": "dcdcsFilterOptions.html",
        "classSelect": "dcdcsOptions"
    },
    {
        "templateHtml": "dashBoardLeftInsight.html",
        "classSelect": "leftpanel"
    },
    {
        "templateHtml": "advanceFilterOptions.html",
        "classSelect": "advancedOptions"
    },
    {
        "templateHtml": "reportFilterOptions.html",
        "classSelect": "reportdashboard"
    }
]

в хромовой сети показывает ожидающий статус для первого запроса навсегда, и, следовательно, все висит. но manuall try возвращает данные.

  • 2
    У вас есть бесконечный цикл. Обратный вызов Ajax никогда не может быть выполнен, потому что цикл не завершается. Таким образом, flagArray[i] не может быть установлен на 'done' и i не увеличился. Есть ли конкретная причина, по которой вы хотите последовательно выполнять вызовы Ajax? Почему бы не запустить их параллельно?
  • 0
    да, сэр, потому что это создаст мою страницу, и есть зависимость от первого до следующего. next будет добавлено только к первому нижнему идентификатору, который находится в html ...
Теги:

2 ответа

0

Вы столкнулись с проблемой зависания сеанса из-за одновременной блокировки сеанса ajax-вызовов и блокировки файлов сеанса.

Пожалуйста, используйте функцию session_write_close(), прежде чем возвращать ответ, чтобы решить проблему, как описано здесь. http://php.net/manual/en/function.session-write-close.php

Это также улучшит производительность при одновременном вызове ajax, как показано в этом демо https://demo.ma.ttias.be/demo-php-blocking-sessions/.

Вот подробнее об этом. https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/

0

Если вы хотите сделать последовательные запросы, попробуйте что-то вроде

function request(array) {
    if (!array || !a.length) {
        return
    }
    var item = array.shift();
    $.get('commonCore/templates/' + item.templateHtml, function (html) {
        var filterTemplate = Handlebars.compile(html);
        replaceFilterTemplate(filterTemplate, item.classSelect);
        request(array)
    });
}
request(data)

Проблема с вашим кодом до тех пор, пока весь массив запросов не будет обработан, вы блокируете поток браузера из-за цикла while

  • 0
    Вы забыли позвонить request внутри обратного вызова?
  • 0
    @FelixKling да !!!!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню