script responsexml javascript ajax xmlhttprequest

javascript - responsexml - XmlHttpRequest overrideMimeType para datos salientes



script innerhtml (2)

Quiero que XmlHttpRequest no toque (es decir, convertir a UTF-8 o cualquier otra codificación) cualquiera de los caracteres que está enviando y recibiendo desde / hacia el servidor.

Para los caracteres recibidos del servidor, sé que puedo hacer XmlHttpRequest#overrideMimeType(''text/plain; charset=x-user-defined'') y los caracteres se dejan solos.

Sin embargo, para los caracteres enviados al servidor a través de XmlHttpRequest#send call, no pude encontrar una manera de decirle a XmlHttpRequest que no toque esos caracteres. Veo que XmlHttpRequest codifica en UTF-8 sin importar lo que intenté. ¿Hay alguna forma de prevenir esto?


Podría intentar codificar los datos que envía en base64. Hasta donde yo sé, eso siempre será válido, independientemente de la codificación que esté en (UTF-8 / Latin-1 / whatever).


Me encontré con un problema similar para cargar audio capturado desde un micrófono (a través de flash). Así es como lo resolví (probado en FF 9 y cromo 15). El siguiente código js toma una entrada binaria como una cadena y la carga en el servidor sin alteraciones / codificación. Con suerte, esto puede ser útil para alguien.

var audioBytes = <the data you want sent untouched> var crlf = ''/r/n''; var body = ''''; var doubleDash = ''--''; var boundary = ''12345678901234567890''; var file = { name: "online-recording.wav", type: "audio/x-wav", size: audioBytes.length, recordedContent: audioBytes }; var body = doubleDash + boundary + crlf + ''Content-Disposition: form-data; name="file"; '' + ''filename="'' + unescape(encodeURIComponent(file.name)) + ''"'' + crlf + ''Content-Type: '' + file.type + crlf + crlf + file.recordedContent + crlf + doubleDash + boundary + doubleDash + crlf; // copy binary content into a ByteArray structure, so that the browser doesn''t mess up encoding var audioByteArray = new Uint8Array(body.length); for (var i=0; i< audioByteArray.length; i++) { audioByteArray[i] = body.charCodeAt(i); } // use an XMLHttpRequest to upload the file var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { console.log(xhr.readyState); }; xhr.open(''post'', url, true); xhr.setRequestHeader(''X-Requested-With'', ''XMLHttpRequest''); // setup AJAX event handlers here xhr.setRequestHeader(''Content-Type'', ''multipart/form-data; boundary='' + boundary); xhr.send(audioByteArray.buffer);

El truco es construir la solicitud desde un ArrayBuffer, que se ve como datos binarios, para que el navegador no se meta con eso. Alternativamente, si solo apunta a Firefox, podría usar xhr.sendAsBinary () (según lo que he leído, no está portado a ningún otro navegador, mientras que el código anterior parece compatible con W3C)