Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

jquery ajax progress bar с циклом в php

#php #javascript #jquery #ajax #xhr


Всем привет! Пытаюсь использовать jQuery AJAX для моих целей, но столкнулся с проблемой:



$('#go').on('click',function(evt){
    evt.preventDefault();
    $(this).hide();
    $('#progress-bar').show();

    console.log('starting ajax request');
    $.ajax({
        xhr: function () {
            var xhr = new window.XMLHttpRequest();
            xhr.addEventListener('progress', function (e) {
                console.log(e);
                if (e.lengthComputable) {
                    $('.progress-bar').css('width', '' + (100 * e.loaded / e.total)
+ '%');
                }
            });
            return xhr;
        },

        type: 'POST',
        url: 'core.php',
        data: {},
        complete: function (response, status, xhr) {
            console.log(response);
            $('.desc').html(response.responseText);
        }
    });

});
.container-fluid {
	padding-top: 20px;
}
#progress-bar {
	margin-top: 20px;
	display: none;
	width: 100%;
}


	
	
	
	

  
	
	






В core.php мне нужно провести будет некоторые операции над массивами. Предположим,
это будет: 




Мой javascript не работает. Знаю, что это из-за того, что e.lengthComputable = false.
Также узнал, что core.php headers содержат Content-Length: 0. Ок. Но что я должен сделать,
чтоб мой AJAX запрос работал верно и работал динамический прогресс бар? Спасибо.
    


Ответы

Ответ 1



Content-Length: 0, потому что из PHP нет никакого вывода. Поставьте что-то вроде этого: echo "прогресс" $progress;, ну или что там у вас нужно от контроллера вернуть, чтобы в html затем вставить. В общем, то, что хотите, лучше через websockets сделать, чтобы сам сервер пушал обновления когда у него прогресс, и лучше это делать на node.js. Есть реализации сокетов и под php, но я, правда, заглянул разок как это сделано там, пришел в ужас и предпочитаю использовать node.js. К тому же, нагружать контроллеры PHP интенсивными вычислениями не рекомендуется наукой - если это скажем магазин, вы его положите рано или поздно, когда даже несколько десятков посетителей запустят нечто подобное. Для серверов с интенсивными вычислениями обычно берут Java EE, ставят большую железку. PHP, да и Node.js, по большому счету, для этого не годится.

Комментариев нет:

Отправить комментарий