2015-03-27 12 views
5

Tôi muốn tải lên tệp bằng XMLHTTRequest cho Safari 5.1 và chuyển các tham số trong yêu cầu POST. Làm cách này có thể đạt được? Nó phải ở dạng javascript đơn giản mà không sử dụng bất kỳ API nào và tôi đang thực hiện việc này vì Safari không hỗ trợ FileReader trong phiên bản 5.1.XMLHttpRequest để tải lên tệp có thông số

var fd = new FormData(); 
fd.append('file', $files[i]); 
var xhr = new XMLHttpRequest(); 
xhr.addEventListener("load", function(){alert("Done!");}, false); 
xhr.open("POST", url.getUrl('myurl')); 
xhr.send(fd); 

Đoạn mã trên có đúng không? Làm cách nào để chuyển các tham số cho yêu cầu POST.

+0

Bạn có thể thêm một chút mô tả thêm về vấn đề bạn có? – abarisone

+0

'$ files' là gì? – Bergi

+0

Bạn muốn lấy tệp từ đâu? – Bergi

Trả lời

0

Hãy thử if(window.FormData === undefined) or if(window.FormData !== undefined).

để tham khảo thêm click here

Bạn cũng nên thử cái này!

<script> 
    var client = new XMLHttpRequest(); 

    function upload() 
    { 
     var file = document.getElementById("uploadfile"); 

     /* Create a FormData instance */ 
     var fd = new FormData(); 
     /* Add the file */ 
     fd.append("upload", file.files[0]); 

     client.open("post",url.getUrl('myurl'), true); 
     client.setRequestHeader("Content-Type", "multipart/form-data"); 
     client.send(formData); /* Send to server */ 
    } 

    /* Check the response status */ 
    client.onreadystatechange = function() 
    { 
     if (client.readyState == 4 && client.status == 200) 
     { 
     alert(client.statusText); 
     } 
    } 
</script> 

Như FormData, khả năng gửi() một, và tài sản upload (và sự kiện onprogress của nó) đều là một phần của XMLHttpRequest cấp 2, bạn có thể kiểm tra cho .upload để xem nếu bạn đã có một cấp 2. Tôi không có một Mac tiện dụng, nhưng chức năng (thật đáng buồn, nhưng chính xác) trả về false cho Opera 11.50 (và đúng cho Firefox 4).

0

Mã có vẻ tốt. Nếu bạn muốn chuyển các tham số bổ sung cho POST, bạn sẽ phải thêm chúng vào FormData.

var fd = new FormData(); 
// here the POST parameters 
fd.append('parameter1', 'XXXX'); 
fd.append('parameter2', 'YYYY'); 
// The rest of your code 
fd.append('file', $files[i]); 
... 

EDIT: Tôi không chắc chắn tuy nhiên nếu chức năng này được hỗ trợ trong Safari 5.1

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