2015-06-15 41 views
1

我有這樣的代碼在客戶端:阿賈克斯PHP文件上傳錯誤

fileUpload: function monkey(){ 
     var file = t.gI("photoFile"); //get element by photoFile 
     var formData = new FormData(); 
     console.log(file.files.length); 
     formData.append("upload", file.files[0]); 
     var req = t.gR(); //XMLHTTPRequest 
     req.open('POST', 'php/fileupload.php', true); 
     req.setRequestHeader("Content-Type", "multipart/form-data", true); 
     req.send(formData); 
     req.onreadystatechange = function() { 
      if (req.readyState === 4) { 
       if (req.status == 200 && req.status < 300) { 
        t.gI("eventBox").innerHTML = req.responseText; //eventbox error handler 
        adminHandler.eventBox(); 
       } 
      } 
     } 
    }, 

這在服務器端:

<?php 
    header('Content-Type:multipart/form-data'); 

    echo $_FILES['upload']['tmp_name']; 
?> 

而且我得到這個錯誤信息:

[15- 2015年6月15日12時03分21秒] PHP警告:缺少邊界多部分/形式數據POST數據在未知的行0 [15-Jun-2015 12:03:21 UTC] PHP公告:未定義索引:upload in /家庭/ webprogb /的public_html/PHP /文件上傳.php on line 4

我能做些什麼來解決它?

+1

您不從服務器輸出multipart/form-data。這對於發送正常的非文件上傳形式的客戶**到服務器。你的服務器端腳本應該只是'<?php echo'foo'?>'。如果你所做的只是拋出一個文件名,就不需要頭文件。未定義的索引意味着沒有文件上傳。 'var_dump($ _ FILES)'可能會顯示爲空。 –

回答

0

您可以使用此代碼在純javascript中使用ajax進行文件上傳。根據文件字段ID更改此「#fileUploader」。

var AjaxFileUploader = function() { 
    this._file = null; 
    var self = this; 

    this.uploadFile = function (uploadUrl, file) { 
     var xhr = new XMLHttpRequest(); 
     xhr.onprogress = function (e) { 
      //error 
     }; 

     xhr.onload = function (e) { 
      //error 
     }; 

     xhr.onerror = function (e) { 
      //error 
     }; 

     xhr.open("post", uploadUrl, true); 

     xhr.setRequestHeader("Content-Type", "multipart/form-data"); 
     xhr.setRequestHeader("X-File-Name", file.name); 
     xhr.setRequestHeader("X-File-Size", file.size); 
     xhr.setRequestHeader("X-File-Type", file.type); 

     xhr.send(file); 
    }; 
}; 

AjaxFileUploader.IsAsyncFileUploadSupported = function() { 
    return typeof (new XMLHttpRequest().upload) !== 'undefined'; 
} 

if (AjaxFileUploader.IsAsyncFileUploadSupported) { 
     ajaxFileUploader = new AjaxFileUploader(); 

     $("form").submit(function() { 
      var uploader = $("#fileUploader")[0]; 

      if (uploader.files.length == 0) { 
       return; 
      } else { 
       ajaxFileUploader.uploadFile(
        "/YourUploadUrl", 
        uploader.files[0]); 
      } 

      return false; 
     }); 
    } 
+0

我可以在沒有jQuery的情況下做到嗎? – PumpkinSeed

+0

@ PumpkinSeed我已經更新了答案:)請檢查 –

+0

Thanx我會盡快嘗試。 – PumpkinSeed