3

進行状況をパーセントで示す非同期ファイル アップロード フォームを作成しようとしています。これは FormData オブジェクトで機能すると思いましたが、投稿が機能しているとは思いません。送信しても何も起こりません。私が確認したところ、バグはなく、JavaScript なしで動作するため、PHP は問題ありません。コードに根本的な問題がありますか?

  var handleUpload = function(event){
      event.preventDefault();
      event.stopPropagation();

  var fileInput = document.getElementById('file');
  var data = new FormData();

  for(var i = 0; i < fileInput.files.length; ++i){
     data.append('file[]',fileInput.files[i]);
}
  var request = new XMLHttpRequest();
      request.upload.addEventListener('progress',function(event){
   if(event.lengthComputable){

      var percent = event.loaded / event.total;
      var progress = document.getElementById('upload_progress');

    while (progress.hasChildNones()){
           progress.removeChild(progress.firstChild);
         }
           progress.appendChild(document.createTextNode(Math.round(percent * 100) + '%'));
   }
});

           request.upload.addEventListener('load',function(event){
           document.getElementById('upload_progress').style.display = 'none';
});
           request.upload.addEventListener('error',function(event){
           alert("failed");

});
           request.open('POST','upload.php');
           request.setRequestHeader('Cache-Control','no-cache');
           document.getElementById('upload_progress').style.display = 'block';
};

           window.addEventListener('load',function(event){
           var submit = document.getElementById('submit');
           submit.addEventListener('click',handleUpload);
});

html:

<div id = "upload_progress"></div>

<form id="form" action="" method="post" enctype="multipart/form-data">
    <input id="file" name="file[]" type="file" multiple /><br>
    <input type="submit" name="send" id ="submit" value="send">
</form>

そしてupload.php

if(!empty($_FILES['file'])){
    foreach  ($_FILES['file']['name'] as $key => $name) {
    move_uploaded_file($_FILES['file']['tmp_name'][$key],"myfiles/$name");
  }
}
4

2 に答える 2

2

JavaScript コードの最も重要な行を忘れています。

request.send(data);

この後:

request.setRequestHeader('Cache-Control','no-cache');

于 2013-02-02T21:58:00.330 に答える
1

後に

request.setRequestHeader('Cache-Control','no-cache');

データを送信するのを忘れて..

request.send(data);

ところで、適切なヘッダーを送信する必要があります

request.setRequestHeader("Content-type", ,,,
request.setRequestHeader("Content-length",...
request.setRequestHeader("Connection", "close");
于 2013-02-02T22:25:12.377 に答える