AJAX call останавливает загрузку страницы другими элементами

0

Я создаю сайт, используя Laravel и JQuery. Страница выдает несколько вызовов AJAX.

Один из этих вызовов может занять несколько секунд, и, похоже, он блокирует другие элементы страницы от загрузки. Сюда входят изображения и другие вызовы AJAX.

Мой код более или менее выглядит так.

$.ajax({
        async: true,
        url: url,
        data: {
            //data
        },
        success: function (response) {

        //Process response (append html, images, etc.)

        for (var key in response) {
            newAJAXCall(response[key]);
            }
        },
        error: function (xhr) {

        }
    });

Вызов newAJAXCall выглядит следующим образом:

$.ajax({
        async: true,
        url: url,
        data: {
            //data

        },
        success: function (response) {
            //Process response

        },
        error: function (xhr) {

        }
    });

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

В случае с изображениями html для них уже существует. Браузер просто перестает загружать их, пока не будет выполнен вызов AJAX.

Я уже пробовал устанавливать асинхронный режим и использовать таймаут, но ничего не исправляет. Проблема возникает как в Chrome, так и в Safari, поэтому она не является специфичной для браузера.

EDIT: даже когда for-loop удаляется, и новый вызов ajax выдается только после устранения проблемы, если вызов длится долго.

EDIT2: Возможно ли, что Laravel/Php ограничивает количество соединений, которые может открыть один клиент?

EDIT3: Кажется, мой сервер вызывает проблему. Когда я загружаю изображения с другого сервера, чем мои собственные, они загружаются штрафом во время запросов ajax.

  • 0
    Что находится в вашей новой функции AJAXCall? Вы также сделали это асинхронным?
  • 0
    Это аналогичный вызов AJAX, за исключением того, что этот вызов не вызывает новый вызов AJAX. Я установил оба на асинхронный.
Показать ещё 4 комментария

2 ответа

0

Проблема заключалась в том, что мой сервер localhost не имел достаточной емкости. Когда сайт работает на моем выделенном сервере, все загружается нормально.

-1

В соответствии с моим комментарием, пожалуйста, подумайте о том, чтобы положить цикл в функцию успеха newAJAXCall

$.ajax({
    async: true,
    url: url,
    data: {
        //data
    },
    success: function (response) {

    //Process response (append html, images, etc.)


        newAJAXCall(response);
    },
    error: function (xhr) {

    }
});


function newAJAXCall(response) {
$.ajax({
    async: true,
    url: url,
    data: {
        //data

    },
    success: function (response) {

        for (var key in response) {
            //Process response[key]
        }

    },
    error: function (xhr) {

    }
});

}

  • 0
    Спасибо за ваш ответ. Однако цикл for, похоже, не вызывает проблемы. Когда я вынимаю его и запускаю ajax-вызов только один раз для одного из более длинных вызовов, проблема сохраняется.
  • 0
    stackoverflow.com/questions/18366118/… Я считаю, что это ответ тогда :)
Показать ещё 4 комментария

Ещё вопросы

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