2013-07-29 3 views
2

나는 파일을 가져 와서 처리하고 업로드 한 업로드 스크립트를 작성하고 있습니다. 처리에는 몇 분이 걸릴 수 있습니다. 사용자 피드백을 제공하기 위해 현재 수행중인 작업은 실제 업로드 중에 업로드 막대를 표시하는 것입니다. 업로드가 끝나면 "처리 중"메시지로 바꾸십시오. 파일 처리가 끝나면 메시지는 새 파일에 대한 링크로 바뀝니다. 이것은 크롬에서 잘 작동하지만 파이어 폭스에서는 99.9 %까지만 진행률 막대를 얻을 수 있습니다. 연결을 닫기 전에 업로드가 완료되었는지 확인할 수있는 방법이 있습니까? 여기 AJAX가있는 Firefox에서 진행 이벤트가 100 %에 도달하지 않습니다.

내가 현재

outter = $(".item_box")[0];//content wrapper 
    inner = outter.children[0];//content viewer, will be replaced with messages and content 

    var p = document.createElement("progress"); 
    p.className = "uploadprogress"; 
    p.value = "0"; 
    p.max = "100"; 
    inner.textContent = ""; 
    inner.appendChild(p);//replace initial "click here" message with progress bar 

    var formData new FormData(); 
    for (var i = 0; i < files.length; i++)//files is defined elsewhere and contains form data 
    { 
     formData.append('userfile', files[i]); 
    } 

    // now post a new XHR request 
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', base_url+'upload/upload_media');//url of php script 
    xhr.responseType = "json"; 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4)//ajax request complete 
     { 
      p.value = p.innerHTML = 100;//set progress bar to 100% 
      var data = JSON.parse(xhr.responseText);//my returned json object 
      outter.removeChild(inner); 
      var v = document.createElement("video"); 
      v.controls = "controls"; 
      v.innerHtml = data.msg; 
      outter.appendChild(v); 
     } 
    } 
    xhr.upload.onprogress = function (e)//handles progress bar value 
    { 
     if (e.lengthComputable) 
     { 
      var done = e.position || e.loaded, total = e.totalSize || e.total; 
      p.value = p.innerHTML = (Math.floor(done/total*1000)/10); 
      if (done == 100)//this never happens in firefox 
      { 
       inner.removeChild(p); 
       inner.textContent = "processing... please wait"; 
      } 
     } 
    } 
    xhr.send(formData); 

답변

0

이 내가 너무 건너 온 파이어 폭스에서 이상한 문제가있는 것입니다. onprogress 이벤트에서 100 % 진행될 코드를 xhr.readyState으로 이동하여이 문제를 해결했습니다. onprogress 이벤트에서 제거했습니다. 두 곳에서 코드를 작성하면 문제가 발생했기 때문입니다.

0

Ugh ... Firefox는 여전히이 버그를 해결하지 못했습니다. 나는 FF 버전 28에서 같은 문제로 고민하고있다. OP와 마찬가지로 은 코드가 "onload"핸들러에서 "onload"핸들러로 옮길 수 없기 때문에 "onload"핸들러에서 코드를 옮길 수 없다. 업로드 된 파일 처리가 완료되었습니다. 파일 업로드가 완료된 시점보다 훨씬 늦을 수 있습니다. 업로드 된 파일이 작을수록 더 빨리 FF로보고 진행이 중단됩니다 (예 : 280K 파일의 경우보고가 84 %에서 중지 될 수 있지만 5MB 파일은 99 %에서 100 %로 끝날 수 있음). OP가 일관되게 큰 파일을 다루고 있기 때문에 그는 자신의 조건을 "(done == 99)"또는 비슷한 임계치로 설정할 수 있습니다. 불행히도, 그것은 나 또는 파일 크기의 넓은 범위를 다루는 다른 누군가를 위해 작동하지 않을 것입니다. 어서, 파이어 폭스!

관련 문제