2010-04-02 1 views
5

Colpire un problema interessante oggi quando si tenta di caricare un file immagine < 2 MB utilizzando dojo.io.iframe.errore dojo.io.iframe durante il caricamento di un file

mia funzione per elaborare il modulo si chiama, ma prima che il modulo viene inviato al server sto ottenendo il seguente errore:

TypeError: ifd.getElementsByTagName ("textarea") [0] è indefinito

la mia funzione che viene utilizzata per l'azione il posto di forma è:

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>'; 

    } 
}); 

} 

la forma è molto semplice con solo un componente di ingresso file e un semplice pulsante che chiama questo po 'di javascript e d ojo.

Ho un codice molto simile nella mia applicazione che carica documenti word/pdf e questo non fa errore, ma per qualche ragione questo lo fa.

Qualche idea o suggerimento su cosa dovrei provare per farlo funzionare senza errori?

Oh sto usando php e Zend framework per il backend se questo ha qualcosa a che fare con esso, ma ne dubito poiché non colpisce nemmeno il server prima che fallisca.

Molte grazie,

sovvenzione

risposta

1

Poiché il gestore di carico di dojo.io.iframe.send() è stato attivato, la richiesta avrebbe dovuto essere inviata al server e la risposta è tornata. Penso che la risposta dal server non sia corretta. Forse il server restituisce una pagina di errore.

Usa Firebug per ispezionare il DOM della pagina corrente e trovare l'iframe di trasporto creato da Dojo e controllarne il contenuto. Firebug può catturare anche I/O iframe, controlla la sua scheda Rete. È possibile trovare la causa principale di questo problema.

+0

Grazie per questo dopo alcuni scavi importanti è stato il processo di backend che inviava alcune cose davvero strane indietro e che stava causando l'errore dell'elemento . Grazie. –

0

Hai rispettare il vincolo scritto nel doc?

IMPORTANTE: Per tutti i valori TRANNE html e xml, la risposta del server deve essere un file HTML con un elemento textarea. I dati di risposta dovrebbero essere all'interno dell'elemento textarea. L'utilizzo di un documento HTML è l'unico modo affidabile per browser che il trasporto può conoscere quando la risposta è stata caricata. Per il mimetype text/html (Or XML), è sufficiente restituire un normale documento HTML/XML. In altre parole, i servizi per i formati JSON e Testo devono restituire i dati come segue:

+0

Sì, mi sono assicurato che sia all'interno dei tag dell'area di testo, ma come ancora non funziona. Passando attraverso il codice con un pettine a denti fini per vedere se riesco a trovare di nuovo qualche errore stupido .. –

3

Un altro motivo comune per questo errore è che il server non sta impacchettando correttamente i dati. Questo significa che anche se hai impostato "handleAs: json" devi inviare quel json avvolto in qualche html. Questo è quello che dovrebbe essere simile:

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

Il tuo errore è stato dicendo che non riusciva a trovare la textarea nel vostro ritorno dal server. Per ulteriori informazioni su http://docs.dojocampus.org/dojo/io/iframe

+0

GRAZIE! Ran in questo errore.Dovrei aver letto i documenti! – Eric

+0

Ciao, mi stavo chiedendo come posso avvolgere il mio JSON nel formato come nei documenti? Attualmente sto cercando di restituire JSON dal mio file python e 'handleAs' è impostato su HTML. – Himanshu