2012-03-08 32 views
54

Khi tôi sử dụng XMLHttpRequest, tệp được tải lên chính xác bằng cách sử dụng FormData. Tuy nhiên, khi tôi chuyển sang jQuery.ajax, mã của tôi bị hỏng.Cách tải lên tệp bằng jQuery.ajax và FormData

Đây là mã ban đầu làm việc:

function uploadFile(blobFile, fileName) { 
    var fd = new FormData(); 
    fd.append("fileToUpload", blobFile); 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "upload.php", true); 
    xhr.send(fd); 
} 

Dưới đây là thất bại jQuery.ajax nỗ lực của tôi:

function uploadFile(blobFile, fileName) { 
    var fd = new FormData(); 
    fd.append("fileToUpload", blobFile); 
    var xm = $.ajax({ 
     url: "upload.php", 
     type: "POST", 
     data: fd, 
    }); 
} 

Tôi đang làm gì sai? Làm thế nào tôi có thể tải tập tin lên một cách chính xác, sử dụng AJAX?

Trả lời

155

Bạn phải thêm processData:false,contentType:false vào phương pháp của mình, để jQuery không thay đổi tiêu đề hoặc dữ liệu (làm hỏng mã hiện tại của bạn).

function uploadFile(blobFile, fileName) { 
    var fd = new FormData(); 
    fd.append("fileToUpload", blobFile); 

    $.ajax({ 
     url: "upload.php", 
     type: "POST", 
     data: fd, 
     processData: false, 
     contentType: false, 
     success: function(response) { 
      // .. do something 
     }, 
     error: function(jqXHR, textStatus, errorMessage) { 
      console.log(errorMessage); // Optional 
     } 
    }); 
} 
+4

Tôi sẽ upvote 1000 lần nếu có thể. Trong số tất cả các câu trả lời khác cho câu hỏi này trên SO, điều này làm việc tốt nhất và là đơn giản nhất. cảm ơn. – sqram

+6

Cảnh báo: FormData không được hỗ trợ trong IE cho đến phiên bản 10. –

+6

Trong câu trả lời này (và câu hỏi), 'blobFile' là gì? Nó là một input.val()? –

Các vấn đề liên quan