2010-11-21 6 views

Répondre

3

À l'heure actuelle, je crois que seulement FF3 + soutient ceci, bien qu'il y ait un workaround pour Chrome.

+0

Quelle est la solution de contournement exactement? – antimatter15

+2

Je crois que la solution consiste à définir votre propre sendAsBinary via le prototype en tant que tel: try { if (XMLHttpRequest.prototype.sendAsBinary) return; XMLHttpRequest.prototype.sendAsBinary = function (datastr) { fonction ByteValue (x) { x.charCodeAt de retour (0) & 0xff; } var ords = Array.prototype.map.call (datastr, ByteValue); var ui8a = nouveau Uint8Array (ords); this.send (ui8a.buffer); } } catch (e) {} –

+11

J'aime comment 'Marko' a répondu à M.' Polo'. – Jimmery

1

Pour autant que je sache, oui, seul Firefox le supporte. Il ne fait pas partie du W3C standard, donc il n'y a aucune garantie qu'il sera jamais pris en charge par un autre navigateur.

2

Les liens autour de http://code.google.com/p/chromium/issues/detail?id=35705 sont très confus, mais je ne pense pas qu'il existe une solution de contournement sur Chrome 8 pour les données binaires POST.

Vous pouvez convertir les données en base64 et les charger, mais le serveur doit pouvoir les décoder. Chrome 9 (actuellement dans le canal Dev, pas encore bêta) vous permet de faire XmlHttpRequest.send (blob) où les octets de blob sont envoyés tels quels (non convertis en utf-8), donc le XmlHttpRequest non standard .sendAsBinary() n'est pas nécessaire pour les téléchargements de fichiers binaires.

Vous devez créer ce blob à partir de la chaîne "binary" qui se trouve dans evt.target.result après un fichier FileReader.readAsBinaryString() réussi. Cela exige l'utilisation ArrayBuffer et Uint8Array, qui ne sont pas disponibles dans Chrome 8.

1

j'avais même erreur, mais je suis aussi à l'aide Prototype.js. On peut dire qu'elle a un certain remplacement pour la fonction de carte et lançaient TypeError pour moi Object ..file data here.. has no method 'each' donc je l'ai utilisé ce remplacement à la place

//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) {} 
Questions connexes