2012-05-09 29 views
10

Tôi có công việc tuyệt vời là phải hoàn thành công việc ban đầu được trao cho nhà thầu nhưng chưa bao giờ được hoàn thành. Không phải là một vấn đề tuy nhiên tôi đã được nói rằng hệ thống phải hỗ trợ Firefox 3.6! Không tuyệt vời nhưng không phải cái gì tôi sẽ mất ngủ cho đến bây giờ! Hệ thống có chức năng Ajax sử dụng đối tượng FormData và sau đó tải lên một tài liệu (thường là PDF). Tôi đã chạy này thông qua trình duyệt Firefox 3.6 và tôi nhận được sauFormData không được xác định - Firefox 3.6.28 thay thế

"FormData không được định nghĩa"
var formData = new FormData ($ ('form') [0]);

Đó là tốt như tôi có thể thấy rằng đối tượng này không được hỗ trợ, tôi chỉ cần sử dụng một phương pháp hoặc các phương tiện thu khác nhau ... Tôi sử dụng này:

var formData = Components.classes["@mozilla.org/files/formdata;1"] 
     .createInstance(Components.interfaces.nsIDOMFormData); 

Tuy nhiên điều này đã cho tôi lỗi sau đây!

Permission denied cho http://10.29.100.23:8080 để có được tài sản XPCComponents.classes

Tôi đã không chắc chắn lý do tại sao điều này là ... là con đường "@mozilla.org/files/formdata;1" không chính xác? Tôi đã nghiên cứu thêm và không nhận được đâu! Vì vậy, tôi thì nghĩ về serializing hình thức thay đổi sau đây để ...

var formData = {}; 

$.each($('form')[0].serializeArray(), function(_, kv) { 
    if (formData.hasOwnProperty(kv.name)) { 
     formData[kv.name] = $.makeArray(formData[kv.name]); 
     formData[kv.name].push(kv.value); 
    }else { 
     formData[kv.name] = kv.value; 
    } 
}); 

mặc dù lỗi này didn # t chức năng Ajax đã không được tải lên (tôi đoán nó không được công nhận hoặc tìm các tập tin hoặc nó là chỉ cần thu thập một chuỗi cho giá trị tệp). Có ai có bất kỳ đề xuất về một thay thế cho FormData trong các trình duyệt cũ, đặc biệt là Firefox 3.6 - đó là trình duyệt cũ duy nhất tôi phải hỗ trợ.

** cập nhật ****

đây là nội dung của các hình thức trên trang HTML

<form action="" method="post" enctype="multipart/form-data" name="uploadForm" id="uploadForm" target="#"> 
    <label for="fileField">Rechnung hochladen</label> 
    <input type="file" name="fileField" id="fileField"> 
    <progress id="progressbar" class="progressbar_margin hidden"></progress> 
</form> 
+1

Yếu tố nào có trong biểu mẫu? Nếu chúng không có đầu vào, bạn sẽ có thể sử dụng '$ ('theForm'). Serialize()' làm thuộc tính 'data' của lệnh' .ajax() '. – Matt

+0

biểu mẫu đơn giản và bao gồm những điều sau đây (xem câu hỏi gốc) –

+0

Nếu câu hỏi có thể được lặp lại là "sử dụng ajax để tải lên tệp" thì điều này có thể giúp: http://stackoverflow.com/questions/1686099/file- upload-via-ajax-within-jquery Trang http://valums.com/ajax-upload/ cho biết nó hỗ trợ firefox 3.6+. Có một ngã rẽ rõ ràng hơn đến nay tại https://github.com/bencolon/file-uploader –

Trả lời

0

Tôi nghĩ rằng bạn nên sử dụng này trước khi mã của bạn :

netscape.security.PrivilegeManager.enablePrivilege(
    'UniversalXPConnect' 
); 

Để chắc chắn cũng làm điều này:

  1. nhập "about: config" vào thanh địa chỉ của bạn;
  2. tìm kiếm "signed.applets.codebase_principal_support";
  3. Đặt giá trị thành true;

Hy vọng nó hoạt động, chúc may mắn.

3

FormData là giao diện cấp 2 XMLHttpRequest giúp dễ dàng gửi biểu mẫu (bao gồm cả tải lên tệp) bằng XHR/Ajax. Như bạn đã khám phá, nó chỉ có sẵn trong Firefox từ phiên bản 4 trở đi. (The MDN documentation có bảng tương thích với trình duyệt.)

Tôi khuyên bạn nên thử dùng jQuery Form Plugin.Nó hỗ trợ dự phòng iframe để tải lên tệp trong các trình duyệt cũ hơn.

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