Maison  >  Article  >  interface Web  >  Suivi de la progression du téléchargement FormData+Ajax (avec code)

Suivi de la progression du téléchargement FormData+Ajax (avec code)

php中世界最好的语言
php中世界最好的语言original
2018-03-30 17:19:061789parcourir

Cette fois, je vais vous présenter la surveillance de la progression du téléchargement FormData+Ajax (avec code). Quelles sont les précautions pour la surveillance de la progression du téléchargement FormData+Ajax Voici un cas pratique, jetons un coup d'œil.

Qu'est-ce que FormData ?

L'objet FormData peut assembler un ensemble de paires clé/valeur utilisées pour envoyer des requêtes à l'aide de XMLHttpRequest. Cela rend l'envoi de données de formulaire plus flexible et plus pratique car il peut être utilisé indépendamment du formulaire. Si vous définissez le type d'encodage du formulaire sur multipart/form-data, le format de données transmis via FormData est le même que le format de données transmis par le formulaire via la méthode submit() ; 🎜>Comment créer un objet FormData

Vous pouvez créer vous-même un objet FormData puis ajouter des champs en appelant sa méthode append(), comme ceci :

Remarque : Champs "userfile" et "webmasterfile" contiennent un fichier. Le champ "userid" est un type numérique, qui sera converti en type chaîne par la méthode FormData.append() (le type de champ de l'objet FormData. peut être Blob, File ou string : Si son type de champ n'est ni Blob ni File, il sera converti en type chaîne

//实例化一个formData对象
var formData = new FormData();
formData.append("username", "Groucho");
formData.append("userid", 123456); // 数字 123456 会被立即转换成字符串 "123456"
// HTML上的 文件类型input[type=file]的文件框,由用户选择
formData.append("userfile", fileInputElement.files[0]);
// JavaScript file-like 对象
var content = '<a id="a"><b id="b">hey!</b></a>'; // 新文件的正文...
var blob = new Blob([content], { type: "text/xml"});
formData.append("webmasterfile", blob);

Utilisez la méthode Ajax de jQuery pour envoyer des données FormData<.>

//记录当前时间
var time=new Date().getTime();
//记录当前进度
var percentage =null;
//记录当前上传速度
var velocity=null;
//记录已上传文件字节大小
var loaded=0;
$.ajax({
 url: 'Url',
 type: "POST",
 data: formData,
 contentType: false, // 必须 不设置内容类型
 processData: false, // 必须 不处理数据
 xhr: function xhr() {
  //获取原生的xhr对象
  var xhr = $.ajaxSettings.xhr();
  if (xhr.upload) {
   //添加 progress 事件监听
   xhr.upload.addEventListener('progress', function (e) {
    var nowDate = new Date().getTime();
    //每一秒刷新一次状态
    if (nowDate - time >= 1000) {
     //已上传文件字节数/总字节数
     percentage = parseInt(e.loaded / e.total * 100);
     //当前已传大小(字节数)-一秒前已传文件大小(字节数)
     velocity = (e.loaded - loaded) / 1024;
     if (percentage >= 99) {
      $(".hintText").html('服务端正在解析,请稍后');
     } else {
      //修改上次记录时间及数据大小
      time = nowDate;
      loaded = e.loaded;
     }
    } else {
     return;
    }
   }, false);
  }
  return xhr;
 },
 success: function success(response) {
  //成功回调   
 },
 error: function error(error) {
  //失败回调    
 }
});
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Veuillez prêter attention aux autres articles connexes sur le sujet. Site Web chinois php pour un contenu plus excitant !

Lecture recommandée :

Ajax+Servlet pour implémenter un lien déroulant sans actualisation (avec code)

Comment utiliser Ajax pour vérifier de manière asynchrone si le nom d'utilisateur est dupliqué

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn