2014-11-04 4 views
3

Это код:Бар Прогресс на PushState

$.ajax({       
     type: "POST", 
     url: url, 
     xhr: function(e) { 
      //Download progress   
      xhr.addEventListener("progress", function(evt){ 
       console.log(evt.lengthComputable); 
       if (evt.lengthComputable) { 
       var percentComplete = evt.loaded/evt.total; 
       //Do something with download progress 
       console.log(percentComplete); 
       } 
      }); 
      return xhr; 
     }, 
     dataType: "json", 
     success: function(data){ 

     } 
    }); 

Это функция я использую, чтобы получить мой взгляд от Codeigniter. Я хочу показывать индикатор выполнения, пока страница загружается. Однако, когда я помещал XHR в функцию AJAX, все перестает работать. Кто-нибудь есть идея, как я могу заставить его работать с индикатором выполнения.

Спасибо заранее.

ответ

2

Вы пропустили объявление переменной, чтобы ваш код не компилировался.

xhr: function() { 
    var xhr = new window.XMLHttpRequest(); // <<<<<<< missed this variable 
    //Download progress 
    xhr.addEventListener("progress", function (evt) { 
     if (evt.lengthComputable) { 
      var percentComplete = evt.loaded/evt.total; 
      //Do something with download progress 
      console.log(percentComplete); 
     } 
    }, false); 
    return xhr; 
}, 

Обратите внимание, что если evt.lengthComputable ложно, то вы не можете измерить прогресс запроса.

+0

Спасибо за ответ человек. Однако; Я получаю evt.lengthComputable false. Есть ли у вас какие-либо идеи, почему это ложь? –

+1

Мне удалось это сделать, но теперь я получаю только номер 1 в конце, когда загрузка закончена. Я предполагаю, что индикатор выполнения больше загружает и загружает файлы. –

+0

Начиная с jQuery 1.9.3+ этот метод не работает. Он однажды поразит слушателя событий, и это произойдет. Я не уверен, почему он больше не работает. –

Смежные вопросы