>  기사  >  웹 프론트엔드  >  FormData+Ajax 업로드 진행 상황 모니터링(코드 포함)

FormData+Ajax 업로드 진행 상황 모니터링(코드 포함)

php中世界最好的语言
php中世界最好的语言원래의
2018-03-30 17:19:061844검색

이번에는 FormData+Ajax 업로드 진행 모니터링(코드 포함)을 가져왔습니다. FormData+Ajax 업로드 진행 모니터링에 대한 주의사항은 무엇인가요?

FormData란 무엇인가요?

FormData 객체는 XMLHttpRequest를 사용하여 요청을 보내기 위해 키/값 쌍 세트를 조합할 수 있습니다. 양식과 독립적으로 사용할 수 있으므로 양식 데이터를 보다 유연하고 편리하게 보낼 수 있습니다. 양식의 인코딩 유형을 multipart/form-data로 설정하면 FormData를 통해 전송되는 데이터 형식은 submit() 메서드를 통해 양식에서 전송되는 데이터 형식과 동일합니다.

FormData 객체 생성 방법;

다음과 같이 FormData 개체를 직접 만들고 해당 Append() 메서드를 호출하여 필드를 추가할 수 있습니다.

//实例化一个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);

참고: "userfile" 및 "webmasterfile" 필드에는 모두 "userid" 필드가 포함되어 있습니다. FormData.append() 메소드에 의해 문자열 유형으로 변환되는 숫자 유형입니다(FormData 객체의 필드 유형은 Blob, File 또는 문자열일 수 있습니다. 해당 필드 유형이 Blob 또는 File이 아닌 경우에는 다음과 같습니다).

FormData 데이터를 전송하려면 jQuery의 Ajax 메소드를 사용하세요.

//记录当前时间
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) {
  //失败回调    
 }
});

이 기사의 사례를 읽으신 후 메소드를 마스터하셨을 것으로 믿습니다. PHP 중국어 웹사이트의 다른 관련 기사를 참고하세요!

추천 읽기:

새로고침 드롭다운 링크가 없는 Ajax+Servlet 구현(코드 포함)

Ajax를 사용하여 사용자 이름이 중복되는지 비동기적으로 확인하는 방법

위 내용은 FormData+Ajax 업로드 진행 상황 모니터링(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.