2010-11-21 15 views

risposta

3

Al momento, credo che solo FF3 + supporti questo, anche se c'è un workaround per Chrome.

+0

Che cosa è esattamente la soluzione? – antimatter15

+2

Credo che la soluzione alternativa sia definire il proprio sendAsBinary tramite prototipo in quanto tale: provare { se (XMLHttpRequest.prototype.sendAsBinary) restituisce; XMLHttpRequest.prototype.sendAsBinary = funzione (datastr) { funzione byteValue (x) { ritorno x.charCodeAt (0) & 0xff; } var ords = Array.prototype.map.call (datastr, byteValue); var ui8a = new Uint8Array (ords); this.send (ui8a.buffer); } } catch (e) {} –

+11

Mi piace come 'Marko' ha risposto a' Polo'. – Jimmery

1

Per quanto ne so, sì, solo Firefox lo supporta. Non fa parte dello W3C standard, quindi non c'è alcuna garanzia che sarà mai supportato da nessun altro browser.

2

I collegamenti intorno a http://code.google.com/p/chromium/issues/detail?id=35705 sono molto confusi, ma non penso che ci sia una soluzione alternativa su Chrome 8 per i dati binari POST'ing.

È possibile convertire i dati in base64 e caricarli, ma il server deve essere in grado di decodificarli.

Chrome 9 (attualmente nel canale Dev, nemmeno Beta ancora) consente di eseguire XmlHttpRequest.send (blob) in cui i byte del blob vengono inviati così come sono (non convertiti in utf-8), quindi l'XmlHttpRequest non standard .sendAsBinary() non è necessario per i caricamenti di file binari.

È necessario creare questo BLOB dalla stringa "binaria" presente in evt.target.result dopo un FileReader.readAsBinaryString() eseguito correttamente. Ciò richiede utilizzando ArrayBuffer e Uint8Array, che non sono disponibili in Chrome 8.

1

ho avuto lo stesso errore, ma sto utilizzando anche prototype.js. Sembra ha qualche sostituzione per la funzione mappa e si lanciavano TypeError per me Object ..file data here.. has no method 'each' così ho usato questa sostituzione invece

//fix sendAsBinary for chrome 
try { 
    if (typeof XMLHttpRequest.prototype.sendAsBinary == 'undefined') { 
    XMLHttpRequest.prototype.sendAsBinary = function(text){ 
     var data = new ArrayBuffer(text.length); 
     var ui8a = new Uint8Array(data, 0); 
     for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff); 
     this.send(ui8a); 
    } 
    } 
} catch (e) {} 
Problemi correlati