рдирдИ XMLHttpRequest2 рд╕реБрд╡рд┐рдзрд╛рдПрдБ

HTML5 рдмреНрд░рд╣реНрдорд╛рдгреНрдб рдХреЗ рдЕрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╛рдпрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ XMLHttpRequest 2 рд╣реИред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рдиреЗ рдкрд░, XHR2 HTML5 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИред XHR2 рдПрдХ рд╣реА XMLHttpRequest рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рдеред XHR2 рдЬрдЯрд┐рд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдорд╛рд░реЗ рдкреБрд░рд╛рдиреЗ рдорд┐рддреНрд░ XMLHttpRequest рдиреЗ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рд╣реИрдВред XMLHttpRequest Level 2 рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ XMLHttpRequest рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдПрдХ рдЭрдВрдЭрд░реА рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рдЧрд▓ рд╣реИрдХ рдФрд░ рдиреГрддреНрдп рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧреА: рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдЕрдиреБрд░реЛрдз, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ, рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ AJAX рдХреЛ рдирд╡реАрдирддрдо рдПрдЪрдЯреАрдПрдордПрд▓ 5 рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣реИрдХ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИрдВ: рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ , рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдФрд░ рд╡реЗрдмрдЬреАрдПрд▓ред

рдпрд╣ рд▓реЗрдЦ XMLHttpRequest рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рдг


XHR рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдпрд╣ рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдЪрд╛рд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдЪрд┐рддреНрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛:
var xhr = new XMLHttpRequest(); xhr.open('GET', '/path/to/image.png', true); //   ,      xhr.overrideMimeType('text/plain; charset=x-user-defined'); xhr.onreadystatechange = function(e) { if (this.readyState == 4 && this.status == 200) { var binStr = this.responseText; for (var i = 0, len = binStr.length; i < len; ++i) { var c = binStr.charCodeAt(i); //String.fromCharCode(c & 0xff); var byte = c & 0xff; } } }; xhr.send(); 

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк responseText рдореЗрдВ рдПрдХ рдмрд╛рдЗрдирд░реА рдмреВрдБрдж рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рдЗрдирд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдкрд┐рдХреНрдЪрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╣рдо XMLHttpRequest рдХреЛ рдЯреНрд░рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛ рдХрдЪреНрдЪрд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рд╣реИрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд╛рд▓рд╛ рдЬрд╛рджреВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рд░реВрдк рдХрд╛ рд╕рдВрдХреЗрдд


рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдЪрд┐рддреНрд░ рдХреЛ "рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓" рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛, рд╕рд░реНрд╡рд░ рдорд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЗрд╕реЗ рдмрд╛рдЗрдирд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ред рдЗрд╕ рдЬрд╛рджреВ рдХреЗ рдмрдЬрд╛рдп, рдЖрдЗрдП рдирдИ XMLHttpRequest рд╕реБрд╡рд┐рдзрд╛ - responseType рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЧреБрдгреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВ, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

xhr.responseType
рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк xhr.responseType рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: "рдкрд╛рда", "рд╕рд░рдгреАрдмрдлрд╝рд░", "рдмреВрдБрдж" рдпрд╛ "рджрд╕реНрддрд╛рд╡реЗрдЬрд╝" (рдбрд┐рдлрд╝реЙрд▓реНрдЯ "рдкрд╛рда" рд╣реИ)ред

xhr.response
рдПрдХ рд╕рдлрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ DOMTring, ArrayBuffer, Blob рдпрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдореЗрдВ рдорд╛рдВрдЧреА рдЧрдИ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯрд╛рдЗрдк рд╣реЛрдЧреАред

рдЗрд╕ рдорд╣рд╛рди рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░ рд╣рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ ArrayBuffer рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рд╣рдо BlobBuilder API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ Blob рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ:
 BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder; var xhr = new XMLHttpRequest(); xhr.open('GET', '/path/to/image.png', true); xhr.responseType = 'arraybuffer'; xhr.onload = function(e) { if (this.status == 200) { var bb = new BlobBuilder(); bb.append(this.response); // :  xhr.responseText var blob = bb.getBlob('image/png'); /*...*/ } }; xhr.send(); 

рдЗрддрдирд╛ рдмреЗрд╣рддрд░!

ArrayBuffer рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрддреНрддрд░

ArrayBuffer рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓рд╛ рдХрдВрдЯреЗрдирд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдмрдлрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди ArrayBuffer рдХреА рдЕрд╕рд▓реА рддрд╛рдХрдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░рдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдПрдХ ArrayBuffer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ 8-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд 32-рдмрд┐рдЯ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА ArrayBuffer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдПрдХ рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╣рдорд╛рд░реА рддрд╕реНрд╡реАрд░ рдХреЛ ArrayBuffer рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдбреЗрдЯрд╛ рд╕реЗ 8-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ:
 var xhr = new XMLHttpRequest(); xhr.open('GET', '/path/to/image.png', true); xhr.responseType = 'arraybuffer'; xhr.onload = function(e) { var uInt8Array = new Uint8Array(this.response); // this.response == uInt8Array.buffer // var byte3 = uInt8Array[4]; // 4-  /*...*/ }; xhr.send(); 

рдмреВрдБрдж рдЬрд╡рд╛рдм

рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ Blob рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ / рдпрд╛ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдЗрдЯ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ xhr.responseType='blob' рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЕрдм рдХреЗрд╡рд▓ Chrome crbug.com/52486 рдореЗрдВ ):
 window.URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(); xhr.open('GET', '/path/to/image.png', true); xhr.responseType = 'blob'; xhr.onload = function(e) { if (this.status == 200) { var blob = this.response; var img = document.createElement('img'); img.onload = function(e) { window.URL.revokeObjectURL(img.src); // Clean up after yourself. }; img.src = window.URL.createObjectURL(blob); document.body.appendChild(img); /*...*/ } }; xhr.send(); 

Blob рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: indexedDB рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдмрдЪрдд, HTML5 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд▓рд┐рдЦрдирд╛, рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ Blob URL ( MDC ) рдмрдирд╛рдирд╛ред

рдбреЗрдЯрд╛ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ


рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ (рд╕рд░реНрд╡рд░ рдкрд░) рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред XMLHttpRequest рдиреЗ рд╣рдореЗрдВ DOMString рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (XML) рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдпрд╣ рдЕрддреАрдд рдореЗрдВ рд╣реИред рдЕрджреНрдпрддрди рднреЗрдЬрд╛ рдЧрдпрд╛ () рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: DOMString, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рдлрд╝реЙрд░реНрдордбрд╛рдЯрд╛, рдмреВрдБрдж, рдлрд╝рд╛рдЗрд▓, ArrayBufferред рд▓реЗрдЦ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЗрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦреЗрдВрдЧреЗред

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛: xhr.send (DOMString)

XMLHttpRequest 2 рд╕реЗ рдкрд╣рд▓реЗ:
 function sendText(txt) { var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.onload = function(e) { if (this.status == 200) { console.log(this.responseText); } }; xhr.send(txt); } sendText('test string'); 

XMLHttpRequest 2 рдХреЗ рдмрд╛рдж:
 function sendTextNew(txt) { var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.responseType = 'text'; // <<< xhr.onload = function(e) { if (this.status == 200) { console.log(this.response); // <<< } }; xhr.send(txt); } sendText2('test string'); 

рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ responseType рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк responseType рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдореЗрд╢рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рда)ред

рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдЬрдорд╛ рдХрд░рдирд╛: xhr.send (рдлреЙрд░реНрдордбреЗрдЯрд╛)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рдиреЗ AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдпрд╛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдкреНрд░рдкрддреНрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдПрдХ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд┐рд╕реЗ рдПрдХреНрд╕рдПрдЪрдЖрд░ 2 рд╕рдордЭрддрд╛ рд╣реИред FormData рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдордХреНрдЦреА рдкрд░ HTML рдлреЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред AJAX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпреЗ рдлреЙрд░реНрдо рдЬрдорд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 function sendForm() { var formData = new FormData(); formData.append('username', 'johndoe'); // <<< formData.append('id', 123456); // <<< var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.onload = function(e) { /*...*/ }; xhr.send(formData); // <<< 

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд╣рдо рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдкрддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдкреЗрдВрдб рдкрджреНрдзрддрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдФрд░ рдЖрдкрдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред FormData рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкреГрд╖реНрда рдкрд░ рдореМрдЬреВрджрд╛ HTMLFormElement рддрддреНрд╡реЛрдВ рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 <form id="myform" name="myform" action="/server"> <input type="text" name="username" value="johndoe"> <input type="number" name="id" value="123456"> <input type="submit" onclick="return sendForm(this.form);"> </form> 

 function sendForm(form) { var formData = new FormData(form); //  FormData  HTMLFormElement formData.append('secret_token', '1234567890'); //      var xhr = new XMLHttpRequest(); xhr.open('POST', form.action, true); xhr.onload = function(e) { /*...*/ }; xhr.send(formData); return false; //   } 

HTML рдлрд╝реЙрд░реНрдо рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ ( <input type="file"> ) - рдлрд╝реЙрд░реНрдордбреЗрдЯ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдмрд╕ рдлрд╝рд╛рдЗрд▓ (рдУрдВ) рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ send() рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ multipart/form-data рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ!
 function uploadFiles(url, files) { var formData = new FormData(); for (var i = 0, file; file = files[i]; ++i) { formData.append(file.name, file); } var xhr = new XMLHttpRequest(); xhr.open('POST', url, true); xhr.onload = function(e) { /*...*/ }; xhr.send(formData); // multipart/form-data } document.querySelector('input[type="file"]').addEventListener('change', function(e) { uploadFiles('/server', this.files); }, false); 

рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрдирд╛ рдпрд╛ рдмреНрд▓реЙрдм рдХрд░рдирд╛: xhr.send (Blob)

XHR2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдлрд╛рдЗрд▓ рдпрд╛ рдмреНрд▓реЙрдм рднреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмреНрд▓реЙрдм рд╣реИрдВред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо BlobBuilder API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдПрдХ рдирдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕ Blob рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдХреЛрдб рдПрдХ рд╣реИрдВрдбрд▓рд░ рднреА рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА HTML5 рд╕реБрд╡рд┐рдзрд╛):
 <progress min="0" max="100" value="0">0% complete</progress> 

 function upload(blobOrFile) { var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.onload = function(e) { /*...*/ }; //     var progressBar = document.querySelector('progress'); xhr.upload.onprogress = function(e) { // <<< if (e.lengthComputable) { progressBar.value = (e.loaded / e.total) * 100; progressBar.textContent = progressBar.value; //      progress } }; xhr.send(blobOrFile); // <<< } var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder; var bb = new BlobBuilder(); bb.append('hello world'); // <<< upload(bb.getBlob('text/plain')); // <<< 

рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реЗрдЯ рднреЗрдЬреЗрдВ: xhr.send (ArrayBuffer)

рд╣рдо ArrayBuffers рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ
 function sendArrayBuffer() { var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.onload = function(e) { /*...*/ }; var uInt8Array = new Uint8Array([1, 2, 3]); // <<< xhr.send(uInt8Array.buffer); // <<<< } 

рдХреНрд░реЙрд╕ рдУрд░рд┐рдЬрд┐рдирд▓ рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ (рдХреЛрд░)


CORS рдПрдХ рдбреЛрдореЗрди рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рджреВрд╕рд░реЗ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП AJAX рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ! рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд╡рдпрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ рднреЗрдЬреЗрдЧрд╛ред

рдХреЛрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди example.com рдкрд░ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ www.example2.com www.example2.com рдЖрдорддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ AJAX рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ "рдореВрд▓ рдмреЗрдореЗрд▓" рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдХреЛрд░ рдХреЗ рд╕рд╛рде www.example2.com www.example2.com рдХреЗрд╡рд▓ рдПрдХ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдЬреЛрдбрд╝рдХрд░ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП example.com рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ:
 Access-Control-Allow-Origin: http://example.com 

Access-Control-Allow-Origin рд╣реЗрдбрд░ рдПрдХ рд╕рд╛рдЗрдЯ рдпрд╛ рдХрд┐рд╕реА рднреА рдбреЛрдореЗрди рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 Access-Control-Allow-Origin: * 

Html5rocks.com рдкрд░ рдХрд┐рд╕реА рднреА рдкреЗрдЬ рдкрд░ CORS рд╕рдХреНрд╖рдо рд╣реИред рдпрджрд┐ рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рд╢реАрд░реНрд╖рд▓реЗрдЦ Access-Control-Allow-Origin рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
рдЫрд╡рд┐
рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдХреНрд╡реЗрд░реА рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ CORS рд╕рдХреНрд╖рдо рдХрд░реЗрдВ !

рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдЕрдиреБрд░реЛрдз рдмрдирд╛рдирд╛

рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕рдВрд╕рд╛рдзрди CORS рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдЕрдиреБрд░реЛрдз рдмрдирд╛рдирд╛ рдирд┐рдпрдорд┐рдд XMLHttpRequest рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ example.com рдкрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ www.example2.com www.example2.com :
 var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://www.example2.com/hello.json'); xhr.onload = function(e) { var data = JSON.parse(this.response); /*...*/ } xhr.send(); 

рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ рдФрд░ рдкреЛрд╕реНрдЯрдореИрд╕реЗрдЬ, рд╡рд┐рдВрдбреЛ.рдирд╛рдо, рдбреЙрдХреНрдпреВрдореЗрдВрдЯ.рдбреЛрдореЗрди, рд╕рд░реНрд╡рд░ рдкреНрд░реЙрдХреНрд╕рд┐рд╕ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдиреНрдп рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдиреГрддреНрдп рдХреЗ рд╕рд╛рде рдХреЛрдИ рдиреГрддреНрдп рдирд╣реАрдВ рд╣реИред

рдЙрджрд╛рд╣рд░рдг


HTML5 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд┐рддреНрд░реЛрдВ рдХреА рдПрдХ рдЧреИрд▓рд░реА рд╣реИ рдФрд░ рд╣рдо рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХрдИ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
 window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem; function onError(e) { console.log('Error', e); } var xhr = new XMLHttpRequest(); xhr.open('GET', '/path/to/image.png', true); xhr.responseType = 'arraybuffer'; // <<< //     xhr.onload = function(e) { // <<< //        window.requestFileSystem(TEMPORARY, 1024 * 1024, function(fs) { // <<< //   -   fs.root.getFile('image.png', {create: true}, function(fileEntry) { //   fileEntry.createWriter(function(writer) { writer.onwrite = function(e) { /*...*/ }; writer.onerror = function(e) { /*...*/ }; //  Blob    var bb = new BlobBuilder(); // <<< bb.append(this.response); // <<< //    writer.write(bb.getBlob('image/png')); // <<< }, onError); }, onError); }, onError); }; xhr.send(); 

рдЪреЗрддрд╛рд╡рдиреА: рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд╝рд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ

рднрд╛рдЧреЛрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрдирд╛

рдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдПрдХ рдмрдбрд╝реА рдлрд╛рдЗрд▓ рднреЗрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдмрдбрд╝реА рдлрд╛рдЗрд▓ рдХреЛ рдХрдИ рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рд░ рдПрдХ рдХреЛ рдПрдХреНрд╕рдПрдЪрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдмрдбрд╝реЗ рдореЗрдВ рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕реА рддрд░рд╣ рд╣реИ рдХрд┐ рдХреИрд╕реЗ GMail рдмрдбрд╝реЗ рдЕрдЯреИрдЪрдореЗрдВрдЯ рднреЗрдЬрддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ Google рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЬрди рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - 32MB рдкреНрд░рддрд┐ http рдЕрдиреБрд░реЛрдзред
 window.BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder; function upload(blobOrFile) { var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.onload = function(e) { /*...*/ }; xhr.send(blobOrFile); } document.querySelector('input[type="file"]').addEventListener('change', function(e) { var blob = this.files[0]; const BYTES_PER_CHUNK = 1024 * 1024; //    1MB const SIZE = blob.size; var start = 0; var end = BYTES_PER_CHUNK; while(start < SIZE) { // : blob.slice  .  http://goo.gl/U9mE5 if ('mozSlice' in blob) { var chunk = blob.mozSlice(start, end); } else { var chunk = blob.webkitSlice(start, end); } upload(chunk); start = end; end = start + BYTES_PER_CHUNK; } }, false); })(); 

рдореИрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд░рддрд╛ - рд╡рд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рд╕рдВрджрд░реНрдн


1. XMLHttpRequest рд╕реНрддрд░ 2 рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛
2. рдХреНрд░реЙрд╕ рдУрд░рд┐рдЬрд┐рдирд▓ рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ (рдХреЛрд░) рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛
3. рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢
4. рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢

Source: https://habr.com/ru/post/In120917/


All Articles