Массив циклов в ajax

#arrays #ajax #loops

#массивы #ajax #циклы

Вопрос:

Чтобы предварительно загрузить свой веб-сайт, я пытаюсь выполнить цикл массива в Ajax, чтобы увидеть процент загрузки моих 3 изображений, но процент не отображается, только этот текст на странице!

введите описание изображения здесь

Это проблема с кодировкой? Я использовал этот JSFiddle: https://jsfiddle.net/bababalcksheep/r86gM / .

Вот моя страница теста с 1 jpg: http://piecesdetheatre.free.fr/tests/test.html % ок

Вот моя страница теста с 3 jpg: http://piecesdetheatre.free.fr/tests/test2.html % не в порядке

Я новичок. Есть идеи, почему это происходит? Спасибо за вашу помощь.

 <!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>ajax percentage</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="robots" content="noindex, nofollow">
  <meta name="googlebot" content="noindex, nofollow">
  <meta name="viewport" content="width=device-width, initial-scale=1">


  <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js" ></script>

 
  
</head>
<body>
    <div id="progressCounter"></div>
<br>
<div id="loading">Loading</div>
<br>
<div id="data"></div>

    <script type="text/javascript">//<![CDATA[
array = ['gogol','labiche','courteline'];

for(var i=0;i<array.length;i  ){
//var id = array[i];
//console.log(id   array[i]);
var progressElem = $('#progressCounter');
var URL = "http://piecesdetheatre.free.fr/img/"   array[i]   ".jpg";
$("#loading").hide();
$("#progressCounter").append(URL);


$.ajax({
    type: 'GET',
    dataType: 'json',
    url: URL,
    cache: false,
    error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.responseText);//affiche le code source
        alert(thrownError);
    },
    xhr: function () {
        var xhr = new window.XMLHttpRequest();
        //Download progress
        xhr.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
               document.getElementById("progressCounter").innerHTML =
            this.responseText;
            }
        }, false);
        return xhr;
    },
    beforeSend: function () {
        $('#loading').show();
    },
    complete: function () {
        $("#loading").hide();
    },
    success: function (json) {
        $("#data").html("data receieved");
    }
});
}

  //]]></script>

  

    

</body>
</html>
  

Ответ №1:

Несколько указателей (могут не полностью ответить на ваш вопрос)

Ваш ответ ajax — это изображение. Поэтому dataType не должно быть JSON, если его json jQuery попытается проанализировать ответ JSON. В вашем случае это не JSON, поэтому он выдаст ошибку.

Попробуйте dataType: 'text' или удалите эту пару ключ-значение.

document.getElementById(«progressCounter»).innerHTML = this.responseText;

Вы пытаетесь предоставить данные изображения элементу html. Это то, что вы видите на изображении.

Попробуйте это вместо

 document.getElementById("progressCounter").innerHTML = evt.total
  

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

1. Большое вам спасибо, это помогает мне получить свой процент. Если я напишу console.log(evt.total); Я получаю десятки разных значений. Почему ? Я должен получить только общий вес всех моих изображений?

2. @user14387116 Это потому, что вы загружаете несколько изображений, и для каждого изображения прогресс отличается. Вы показываете прогресс нескольких изображений в одном и том же div, поэтому процент прогресса будет меняться до тех пор, пока весь прогресс изображения не достигнет 100%

3. Деталь: когда я запускаю test.html или test2.html , в то время как полсекунды я вижу изображение (ы) ulrl, можно ли вместо этого отобразить 0%?

4. @user14387116 Вот из-за этой строки $("#progressCounter").append(URL); удалите и проверьте

Ответ №2:

вы должны использовать append

 for(var i=0;i<array.length;i  ){//var id = array[i];
//console.log(id   array[i]);
var URL = "<p>http://piecesdetheatre.free.fr/img/"   array[i]   ".jpg</p>"; $("#loading").hide();
$("#progressCounter").append(URL);
  

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

1. можете ли вы проверить сейчас?

2. нет процента, посмотрите на результаты piecesdetheatre.free.fr/tests/test3.html

3. вы не забыли </p> в URL-адресе var?

Ответ №3:

Я также пробовал этот код. Правильно ли это?

 var idArray = ['gogol.jpg' , 'ionesco.jpg' , 'williams.jpg'];
for(var i = 0;i < idArray.length;i  ) {
    (function(i) {
        var xhr = new XMLHttpRequest(); // ***
        xhr.open('GET', 'http://piecesdetheatre.free.fr/img/'   idArray[i]);
        //xhr.setRequestHeader('Authorization', authorizationToken);
        xhr.send(null);
        console.log(xhr.readyState);
        xhr.onprogress = function (event) {
        console.log('LOADING', xhr.readyState); // readyState will be 3
        console.log( Math.round(event.loaded / event.total * 100)  "%");
};
     
    })(i);
}