Firefox est-il le seul à supporter la méthode sendAsBinary?XMLHttpRequest: Support du navigateur pour sendAsBinary?
Répondre
À l'heure actuelle, je crois que seulement FF3 + soutient ceci, bien qu'il y ait un workaround pour Chrome.
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.
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.
La solution pour Chrome est expliqué à l'adresse suivante:
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) {}
- 1. Support du navigateur DocumentFragment
- 2. Comment détecter correctement le support du navigateur pour l'opacité?
- 3. jQuery vérifier si position du support du navigateur: fixe
- 4. Meilleure façon de récupérer XmlHttpRequest navigateur croisé
- 5. Javascript Support du navigateur Web de Second Life
- 6. Support audio multi-navigateur (No Flash)
- 7. jQuery Support de navigateur croisé AJAX Fileupload
- 8. conversion XMLHttpRequest pour jsonp
- 9. XMLHttpRequest problème
- 10. Pouvez-vous tester le support du navigateur pour -moz-linear-gradient?
- 11. (Mobile) Support du navigateur pour le partage de ressources d'origine croisée?
- 12. Analyse du code HTML avec XPath/XMLHttpRequest
- 13. Fin officielle du support pour PHP4?
- 14. JQuery - Détection du support pour l'affichage CSS: table-rangée-groupe '
- 15. XMLHttpRequest dans un XMLHttpRequest chargé
- 16. Détection du support pour un événement JavaScript donné?
- 17. Utiliser jQuery pour remplacer XMLHttpRequest
- 18. Détecter: le support du premier enfant
- 19. XMLHttpRequest - JSON - .NET
- 20. XmlHttpRequest bug?
- 21. XMLHttpRequest Basic Auth, deuxième requête
- 22. JavaScript & XMLHttpRequest
- 23. Prise en charge du support HTML5 Safari4
- 24. Polices d'aide du navigateur/OS
- 25. cross support Unicode support
- 26. Support multi-navigateur/mise en œuvre des codes d'état HTTP
- 27. Très longue durée XmlHttpRequest
- 28. JScript/VBScript: Suivi du téléchargement du fichier via XMLHttpRequest
- 29. IDE Support pour WinForms
- 30. Qt support pour VNC
Quelle est la solution de contournement exactement? – antimatter15
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) {} –
J'aime comment 'Marko' a répondu à M.' Polo'. – Jimmery