2010-04-02 40 views
5

Đã xảy ra sự cố thú vị ngay hôm nay khi cố gắng tải lên tệp hình ảnh < 2MB bằng dojo.io.iframe.dojo.io.iframe lỗi khi tải lên tệp

chức năng của tôi để xử lý các hình thức được gọi, nhưng trước khi form được gửi đến máy chủ Tôi nhận được lỗi sau:

Lỗi Loại: ifd.getElementsByTagName ("textarea") [0] là undefined

chức năng của tôi được sử dụng để hành động bài có dạng là:

function uploadnewlogo(){ 

var logoDiv = dojo.byId('userlogo'); 
var logoMsg = dojo.byId('uploadmesg'); 

//prep the io frame to send logo data. 
dojo.io.iframe.send({ 
    url: "https://stackoverflow.com/users/profile/changelogo/", 
    method: "post", 
    handleAs: "text", 
    form: dojo.byId('logoUploadFrm'), 
    handle: function(data,ioArgs){ 

     var response = dojo.fromJson(data); 


     if(response.status == 'success'){ 

      //first clear the image 
      //dojo.style(logoDiv, "display", "none"); 
      logoDiv.innerHTML = ""; 

      //then we update the image 
      logoDiv.innerHTML = response.image; 

     }else if(response.status == 'error'){ 

      logoMsg.innerHTML = data.mesg; 

     }else{    

      logoMsg.innerHTML = '<div class="error">Whoops! We can not process your image.</div>'; 
     } 

    }, 
    error: function(data, ioArgs){ 

     logoMsg.innerHTML = '<div class="error">' + data + '</div>'; 

    } 
}); 

} 

hình thức rất cơ bản chỉ với một thành phần tập tin đầu vào và một nút đơn giản mà các cuộc gọi này chút javascript và d ojo.

Tôi có mã rất giống trong ứng dụng của mình tải lên tài liệu word/pdf và điều đó không có lỗi, nhưng vì lý do nào đó điều này xảy ra.

Bất kỳ ý tưởng hay gợi ý nào về những gì tôi nên cố gắng làm cho nó hoạt động không có lỗi? Tôi đang sử dụng php và khung công tác Zend cho phần phụ trợ nếu có bất cứ điều gì để làm với nó, nhưng tôi nghi ngờ nó vì nó thậm chí không đánh máy chủ trước khi nó không thành công.

Rất cám ơn,

Grant

Trả lời

1

Vì trình xử lý tải của dojo.io.iframe.send() đã được kích hoạt, yêu cầu phải được gửi đến máy chủ và phản hồi đã được trả về. Tôi nghĩ rằng phản ứng từ máy chủ không chính xác. Có thể máy chủ trả về một trang lỗi.

Sử dụng Firebug để kiểm tra DOM của trang hiện tại và tìm khung nội tuyến chuyển được tạo bởi Dojo và kiểm tra nội dung của nó. Firebug có thể nắm bắt iframe I/O quá, kiểm tra tab Net của nó. Bạn có thể tìm nguyên nhân gốc rễ của vấn đề này.

+0

Cảm ơn điều này sau khi một số đào chính nó là quá trình phụ trợ gửi một số công cụ thực sự lạ trở lại và đó đã gây ra các yếu tố thất bại . Cảm ơn. –

0

Bạn có tôn trọng các hạn chế được ghi trong doc?

QUAN TRỌNG: Đối với tất cả các giá trị EXCEPT html và xml, Phản hồi của máy chủ phải là tệp HTML có phần tử văn bản. Dữ liệu phản hồi phải nằm bên trong phần tử văn bản. Sử dụng tài liệu HTML là cách duy nhất đáng tin cậy, giao diện chéo mà vận tải này có thể biết khi nào phản hồi đã được tải. Đối với mimetype văn bản/html (Hoặc XML), chỉ cần trả về một tài liệu HTML/XML bình thường. Nói cách khác, các dịch vụ của bạn cho các định dạng JSON và Văn bản phải trả lại dữ liệu được bao bọc như sau:

+0

Vâng tôi đã chắc chắn rằng nó nằm trong các thẻ văn bản, nhưng vẫn không thành công. Đi qua mã với một chiếc lược răng tốt để xem nếu tôi có thể tìm thấy bất kỳ sai lầm ngớ ngẩn một lần nữa .. –

3

Một lý do phổ biến khác cho lỗi này là máy chủ không đóng gói dữ liệu chính xác. Điều này có nghĩa là ngay cả khi bạn đã đặt "handleAs: json", bạn phải gửi json đó được bao bọc trong một số html. Đây là hình thức của nó:

<html> 
    <body> 
     <textarea> 
      { payload: "my json payload here" } 
     </textarea> 
    </body> 
</html> 

Lỗi của bạn là không thể tìm thấy văn bản trả về từ máy chủ. Để biết thêm chi tiết, hãy xem http://docs.dojocampus.org/dojo/io/iframe

+0

CẢM ƠN! Đã gặp lỗi này.Nên đã đọc các tài liệu! – Eric

+0

Xin chào, tôi đã tự hỏi làm cách nào để có thể bọc JSON của mình theo định dạng như trong tài liệu? Hiện tại tôi đang cố gắng trả về JSON từ tệp python của tôi và 'handleAs' được đặt thành HTML. – Himanshu