СвойÑÑво responseType обÑекÑа XMLHttpRequest можно задаÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ñипа оÑвеÑа Ñ ÑеÑвеÑа. ÐозможнÑе знаÑениÑ: пÑÑÑÐ°Ñ ÑÑÑока (по ÑмолÑаниÑ), "arraybuffer", "blob", "document", "json" и "text". СвойÑÑво response бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ñело ÑÑÑноÑÑи в ÑооÑвеÑÑÑвии Ñ Ñипом оÑвеÑа, как ArrayBuffer, Blob, Document, JSON или string. ÐÑо знаÑение Ñавно null, еÑли запÑÐ¾Ñ Ð½Ðµ завеÑÑÑн или не бÑл ÑÑпеÑнÑм.
Ð ÑÑом пÑимеÑе изобÑажение ÑÑиÑÑваеÑÑÑ ÐºÐ°Ðº двоиÑнÑй Ñайл и ÑоздаÑÑÑÑ 8-ÑазÑÑднÑй маÑÑив ÑелÑÑ ÑиÑел без знака из необÑабоÑаннÑÑ Ð±Ð°Ð¹Ñов. ÐбÑаÑиÑе внимание, ÑÑо ÑÑо не бÑÐ´ÐµÑ Ð´ÐµÐºÐ¾Ð´Ð¸ÑоваÑÑ Ð¸Ð·Ð¾Ð±Ñажение и ÑиÑаÑÑ Ð¿Ð¸ÐºÑели. ÐÐ»Ñ ÑÑого вам понадобиÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ png.
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response; // Note: not oReq.responseText
if (arrayBuffer) {
var byteArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteArray.byteLength; i++) {
// do something with each byte in the array
}
}
};
oReq.send(null);
ÐлÑÑеÑнаÑива вÑÑеÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¼ÐµÑÐ¾Ð´Ñ Ð¸ÑполÑзÑÐµÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Blob
Ð´Ð»Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенного поÑÑÑÐ¾ÐµÐ½Ð¸Ñ Blob Ñ Ð´Ð°Ð½Ð½Ñми arraybuffer.
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var blob = new Blob([oReq.response], { type: "image/png" });
// ...
};
oReq.send();
Также Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑиÑаÑÑ Ð´Ð²Ð¾Ð¸ÑнÑй Ñайл как Blob
, ÑÑÑановив ÑÑÑокÑ" blob " в ÑвойÑÑво responseType.
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "blob";
oReq.onload = function (oEvent) {
var blob = oReq.response;
// ...
};
oReq.send();
ÐолÑÑение бинаÑнÑÑ
даннÑÑ
в ÑÑаÑÑÑ
бÑаÑзеÑаÑ
ФÑнкÑÐ¸Ñ load_binary_resource(), Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð½Ð¸Ð¶Ðµ, загÑÑÐ¶Ð°ÐµÑ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе из Ñказанного URL, возвÑаÑÐ°Ñ Ð¸Ñ Ð²ÑзÑваÑÑÐµÐ¼Ñ Ð¾Ð±ÑекÑÑ.
function load_binary_resource(url) {
var req = new XMLHttpRequest();
req.open("GET", url, false);
//XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]
req.overrideMimeType("text/plain; charset=x-user-defined");
req.send(null);
if (req.status != 200) return "";
return req.responseText;
}
ÐÐ°Ð³Ð¸Ñ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð² ÑÑÑоке 5, коÑоÑÐ°Ñ Ð¿ÐµÑеопÑеделÑÐµÑ Ñип MIME, заÑÑавлÑÑ Ð±ÑаÑÐ·ÐµÑ ÑаÑÑмаÑÑиваÑÑ ÐµÐ³Ð¾ как обÑÑнÑй ÑекÑÑ, иÑполÑзÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий Ð½Ð°Ð±Ð¾Ñ Ñимволов. ÐÑо говоÑÐ¸Ñ Ð±ÑаÑзеÑÑ Ð½Ðµ анализиÑоваÑÑ ÐµÐ³Ð¾ и пÑопÑÑкаÑÑ Ð±Ð°Ð¹ÑÑ ÑеÑез необÑабоÑаннÑе.
var filestream = load_binary_resource(url);
var abyte = filestream.charCodeAt(x) & 0xff; // throw away high-order byte (f7)
The example above fetches the byte at offset x
within the loaded binary data. The valid range for x
is from 0 to filestream.length-1
.
See downloading binary streams with XMLHttpRequest for a detailed explanation. See also downloading files.
ÐолÑÑение бинаÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð· ÑазлиÑнÑÑ Ð¸ÑÑоÑниковÐиблиоÑека jBinary Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¸Ð½Ð°ÑнÑми даннÑми в JavaScript позволÑÐµÑ Ð·Ð°Ð³ÑÑзиÑÑ Ð´Ð°Ð½Ð½Ñе из лÑбого иÑÑоÑника, авÑомаÑиÑеÑки опÑеделÑÑ Ð»ÑÑÑий ÑпоÑоб Ð´Ð»Ñ ÑÑого в ÑекÑÑем бÑаÑзеÑе или Node.js:
jBinary.load(url).then(function (binary) {
// здеÑÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ `binary` Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзовÑÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки даннÑÑ
// в лÑбом ÑоÑмаÑе (ÑÑÑока, маÑÑив байÑов, ÑÑÑÑкÑÑÑа даннÑÑ
и Ñ. д.)
});
ÐÑпÑавка бинаÑнÑÑ
даннÑÑ
ÐеÑод send
обÑекÑа XMLHttpRequest бÑл ÑаÑÑиÑен, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð»ÑгкÑÑ Ð¿ÐµÑедаÑÑ Ð±Ð¸Ð½Ð°ÑнÑÑ
даннÑÑ
- ÑепеÑÑ Ð¾Ð½ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±ÑекÑÑ ArrayBuffer
, Blob
, или File
.
РпÑимеÑе ниже на леÑÑ ÑоздаÑÑÑÑ ÑекÑÑовÑй Ñайл и оÑпÑавлÑеÑÑÑ Ð¼ÐµÑодом POST
на ÑеÑвеÑ. ÐдеÑÑ Ð¸ÑполÑзÑеÑÑÑ Ð¾Ð±ÑÑнÑй ÑекÑÑ, но неÑÑÑдно пÑедÑÑавиÑÑ Ñебе пÑÐ¸Ð¼ÐµÑ Ñ Ð±Ð¸Ð½Ð°ÑнÑм Ñайлом.
var oReq = new XMLHttpRequest();
oReq.open("POST", url, true);
oReq.onload = function (oEvent) {
// Uploaded.
};
var blob = new Blob(["abc123"], { type: "text/plain" });
oReq.send(blob);
ÐÑпÑавка ÑипизиÑованнÑÑ
маÑÑивов как бинаÑнÑÑ
даннÑÑ
ТоÑно Ñак же можно оÑпÑавлÑÑÑ ÑипизиÑованнÑе маÑÑÐ¸Ð²Ñ JavaScript.
var myArray = new ArrayBuffer(512);
var longInt8View = new Uint8Array(myArray);
for (var i = 0; i < longInt8View.length; i++) {
longInt8View[i] = i % 255;
}
var xhr = new XMLHttpRequest();
xhr.open("POST", url, false);
xhr.send(myArray);
ÐдеÑÑ ÑоздаÑÑÑÑ Ð¸ оÑпÑавлÑеÑÑÑ 512-Ñи байÑовÑй маÑÑив из 8-биÑнÑÑ ÑелÑÑ ÑиÑел, н, ÑазÑмееÑÑÑ, можно иÑполÑзоваÑÑ Ð»ÑбÑе двоиÑнÑе даннÑе.
ÐÑимеÑание: ÐоддеÑжка пеÑедаÑи обÑекÑов ArrayBuffer
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ XMLHttpRequest поÑвилаÑÑ Ð² Gecko 9.0. Add information about other browsers' support here.
См. ÑÑÐ¾Ñ Ð¿Ð°ÑагÑаÑ.
ÐÑимеÑÑ Ð´Ð»Ñ FirefoxÐ ÑÑом пÑимеÑе двоиÑнÑе даннÑе пеÑедаÑÑÑÑ Ð°ÑинÑ
Ñонно меÑодом POST
и неÑÑандаÑÑнÑм меÑодом Firefox's sendAsBinary()
.
var req = new XMLHttpRequest();
req.open("POST", url, true);
// ÑÑÑановиÑе заголовок и Ñип даннÑÑ
req.setRequestHeader("Content-Length", 741);
req.sendAsBinary(aBody);
Ð ÑÑÑоке 4 заголовок Content-Length ÑÑÑанавливаеÑÑÑ Ð² 741, ÑÑо ознаÑаеÑ, ÑÑо ÑÐ°Ð·Ð¼ÐµÑ Ð´Ð°Ð½Ð½ÑÑ 741 байÑ. РазÑмееÑÑÑ, ÑÑо знаÑение должно ÑооÑвеÑÑÑвоваÑÑ ÑеалÑÐ½Ð¾Ð¼Ñ ÑазмеÑÑ Ð´Ð°Ð½Ð½ÑÑ .
Ð ÑÑÑоке 5 меÑод sendAsBinary()
наÑÐ¸Ð½Ð°ÐµÑ Ð·Ð°Ð¿ÑоÑ.
ÐÑимеÑание: ÐеÑÑандаÑÑнÑй меÑод sendAsBinary
наÑÐ¸Ð½Ð°Ñ Ñ Gecko 31 ÑÑиÑаеÑÑÑ ÑÑÑаÑевÑим и ÑкоÑо бÑÐ´ÐµÑ ÑдалÑн. ÐмеÑÑо него, как показÑвалоÑÑ Ð²ÑÑе, можно иÑполÑзоваÑÑ ÑÑандаÑÑнÑй меÑод send(Blob data)
.
ÐÑоме Ñого, ÑÑÐ¾Ð±Ñ Ð¾ÑпÑавиÑÑ Ð±Ð¸Ð½Ð°ÑнÑе даннÑе можно пеÑедаÑÑ ÑкземплÑÑ nsIFileInputStream
в меÑод send()
. Ð ÑÑом ÑлÑÑае заголовок Content-Length
заполнÑÑÑ Ñвно необÑзаÑелÑно, поÑколÑÐºÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ Ð¸Ð· поÑока авÑомаÑиÑеÑки:
// Создание поÑока из Ñайла.
var stream = Components.classes[
"@mozilla.org/network/file-input-stream;1"
].createInstance(Components.interfaces.nsIFileInputStream);
stream.init(file, 0x04 | 0x08, 0644, 0x04); // file is an nsIFile instance
// ÐопÑÑка опÑÐµÐ´ÐµÐ´ÐµÐ½Ð¸Ñ Ñипа MIME Ð´Ð»Ñ Ñайла
var mimeType = "text/plain";
try {
var mimeService = Components.classes["@mozilla.org/mime;1"].getService(
Components.interfaces.nsIMIMEService,
);
mimeType = mimeService.getTypeFromFile(file); // file is an nsIFile instance
} catch (oEvent) {
/* в ÑлÑÑае оÑибки пÑоÑÑо иÑполÑзоваÑÑ text/plain */
}
// ÐÑпÑавка
var req = Components.classes[
"@mozilla.org/xmlextras/xmlhttprequest;1"
].createInstance(Components.interfaces.nsIXMLHttpRequest);
req.open("PUT", url, false); /* ÑинÑ
ÑоннÑй вÑзов! */
req.setRequestHeader("Content-Type", mimeType);
req.send(stream);
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4