PC.sk

Počítačová ąkola . sk

Ponuka
Návštevnosť
JavaScript v kocke

Odosielanie a prijímanie binárnych dát

Odosielanie a prijímanie binárnych dát

Príjem binárnych dát pomocou JavaScriptu zadaním poľa Vlastnosť  responseType objektu XMLHttpRequest

môže byť nastavená podľa očakávaného typu responseType

zo servera. Možné hodnoty sú prázdny reťazec (predvolené),

"arraybuffer", "blob", "dokument", "JSON" a "text".

Vlastnosť responseType bude obsahovať taký typ aké hodnoty

sú obsiahnuté v tele, ako ArrayBuffer, Blob,

Dokument, JSON, alebo string.

Táto vlastnosť je null v prípade, že žiadosť nie je úplná,

alebo nebola úspešné nastavená.



Tento príklad načíta obrázok ako binárny súbor

a vytvára 8-bitové celočíselné pole z nespracovaných bajtov.

 
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);

 

Alternatívou k vyššie uvedeným spôsobom využíva Blob

rozhranie priamo na costruct-e BLOB s dátami 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();

 

Tiež si môžete prečítať binárny súbor ako Blob nastavením

reťazca "blob", na typ responseType vlastnosti odozvy:

 

var oReq = new XMLHttpRequest(); 
oReq.open("GET", "/myfile.png", true); 
oReq.responseType = "blob";  
oReq.onload = function(oEvent) {   
var blob = oReq.response;   // ... };  
oReq.send();
 
Príjem binárnych dát v starších prehliadačochFunkcia  load_binary_resource() pozri nižšie 
zaťaženie binárne dáta zo zadanej adresy URL,
vracajúcej údaje volajúcemu. 
 
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; 
} 
 
Kúzlo sa deje v súlade 5-tého riadku, 
ktorý prepíše typ MIME, 
núti prehliadač brať to ako obyčajný text, pomocou 
znakovej sady definované užívateľom.
 To hovorí prehliadaču, aby neanalyzoval údaje 
a nechať bajty prejsť nespracované: 
 
var filestream = load_binary_resource(url);
var abyte = filestream.charCodeAt(x) & 0xff; 
// throw away high-order byte (f7) 
 
 Vyššie uvedený príklad načíta byte na posune x
v rámci načítaných binárnych dát. 
Platný rozsah pre x je od 0 do filestream.length-1.
Pozri sťahovanie binárne prúdy s XMLHttpRequest 
pre detailné vysvetlenie. Pozri aj sťahovanie súborov.
 
Odosielanie binárnych dátMetóda send z XMLHttpRequest bola rozšírená 
a umožňujú ľahké prenos binárnych dát tým, že prijíma
 ArrayBuffer,Blob, alebo  File object súboru.

V nasledujúcom príklade odošle vytvorený textový súbor
 on-the-fly a použítím metódy POST na odoslanie "súboru"
 na serveri.
 Tento príklad používa obyčajný text, ale môžete 
si predstaviť, že dáta sú binárne sú miesto textových. 
 
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); 
 
Odosielanie poľa ako binárnych dát
Môžete poslať JavaScript zadané pole
rovnako ako binárne dáta:
 
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);
 
To bol príklad na vybudovanie 512 bajtového poľa 
obsahujúceho 8-bitové celé čísla s jeho odoslaním.
Môžete samozrejme použiť akékoľvek binárne dáta.

Poznámka: Podpora pre odosielanie ArrayBuffer objektov
pomocou XMLHttpRequest sa pridáva k Gecko 9.0
(Firefox a Thunderbird 9.0 / 9.0 / SeaMonkey 2.6).

Vo verzií Gecko 22 je to už zastaralé, spomína sa tu
použitie iných spôsobov. 
Ako je povýšiť spojenie protokolom
HTTP na WEBSOCKET(ws://). 

Inou z možností je použitie SSE
(Server - send events  - http://pocitacovaskola.sk/SSE 
  
Informácie o podpore iných prehliadačov tu:
V podnadpise h2=,,Browser compatibility "
send(ArrayBuffer) => Chrome 9, Mozilla 9.0, IE 10.0,
Opera 11,60, podpora v Safari nie je známa
Dôležité: Pre rozhodovanie čo použiť  je tu článok:
http://dsheiko.com/weblog/html5-and-server-sent-events  
 
Iba pre Firefox konkrétne príklady
 Tento príklad prenáša binárne obsah asynchrónne,
 pomocou metódy POST, a Firefoxu
 neštandardné funkciou iba Firefox-u  sendAsBinary ():
 
var req = new XMLHttpRequest();
req.open("POST", url, true);
// set headers and mime-type appropriately
req.setRequestHeader("Content-Length", 741);
req.sendAsBinary(aBody); 
 
Riadok 4 nastaví hlavičku Content-Length na 741, 
čo znamená, že veľkosť dát je 741 bajtov.
Zrejme budete musieť zmeniť táto hodnota stanovená
na základe skutočnej veľkosti dát, ktoré sa odosielajú.

Riadok 5 používa metódu sendAsBinary ()
pre túto požiadavku.

Poznámka: Táto neštandardná sendAsBinary metóda
je považované za zastarané k Gecko 31
(Firefox 31 / Thunderbird 31 / SeaMonkey 2.28),
a budú odstránené čo najskôr.
Štandardné metóda send (Blob dáta) môže byť
použitá namiesto toho, ako je vysvetlené vyššie.

[Akt. známka: 0 / Počet hlasov: 0] 1 2 3 4 5
| Zdroj: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequ