2012-10-17 7 views
10

Qual è la differenza tra il blocco di questo codice:XMLHttpRequest.addEventListener vs XMLHttpRequest.upload.addEventListener

var xhr = new XMLHttpRequest(); 
xhr.upload.addEventListener("progress", uploadProgress, false); 
xhr.addEventListener("load", uploadComplete, false); 
xhr.addEventListener("error", uploadFailed, false); 
xhr.addEventListener("abort", uploadCanceled, false); 

xhr.open("POST", "upload_url"); 
xhr.send(some_form_data); 

e questo:

var xhr = new XMLHttpRequest(); 
xhr.upload.addEventListener("progress", uploadProgress, false); 
xhr.upload.addEventListener("load", uploadComplete, false); 
xhr.upload.addEventListener("error", uploadFailed, false); 
xhr.upload.addEventListener("abort", uploadCanceled, false); 

xhr.open("POST", "upload_url"); 
xhr.send(some_form_data); 

Ho visto entrambe le implementazioni in blog e altri SO post, ma nessuno spiega perché usano uno sull'altro. L'unica differenza che posso trovare a questo punto è che quest'ultimo non funziona sul browser Android predefinito, mentre il primo sembra funzionare praticamente su tutto.

+0

Penso che 'xhr.upload' è fondamentalmente utilizzato per tracciare lo stato di uplaod dei file che vengono caricati altrimenti utilizzando il primo metodo è sempre meglio. – Amareswar

risposta

8

In base alle specifiche w3c su XMLHttpRequest. http://www.w3.org/TR/XMLHttpRequest/#the-upload-attribute

Come indicato in precedenza, ciascun oggetto XMLHttpRequest ha un oggetto XMLHttpRequestUpload associato.

Gli eventi di avanzamento esistono sia per il download che per i trasferimenti di upload. Gli eventi di download vengono attivati ​​sull'oggetto XMLHttpRequest stesso, come mostrato nell'esempio precedente. Gli eventi di caricamento vengono attivati ​​nell'oggetto XMLHttpRequest.upload