Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ù ÛâØªÙØ§Ùد در ÙÙگا٠ÙÛØ§Ø²Ø Ø¯Ø±Ø®ÙØ§Ø³ØªâÙØ§Û شبک٠را Ø¨Ù Ø³Ø±ÙØ± Ø§Ø±Ø³Ø§Ù Ú©Ø±Ø¯Ù Ù Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¬Ø¯ÛØ¯ را Ø¯Ø±ÛØ§Ùت Ú©ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù Ù Ø§ Ù ÛâØªÙØ§ÙÛÙ Ø¨Ø±Ø§Û Ù ÙØ§Ø±Ø¯ Ø²ÛØ± از Ø¯Ø±Ø®ÙØ§Ø³Øª Ø´Ø¨Ú©Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ :
- Ø§ÙØ²Ùد٠ب٠سبد Ø®Ø±ÛØ¯
- Ø¯Ø±ÛØ§Ùت Ø§Ø·ÙØ§Ø¹Ø§Øª کاربراÙ
- Ø¯Ø±ÛØ§Ùت Ø¨Ø±ÙØ² ترÛÙ Ø§Ø·ÙØ§Ø¹Ø§Øª از س٠ت Ø³Ø±ÙØ±
- Ù ØºÛØ±Ù
Ù ØªÙ Ø§Ù Û Ø§ÛÙ Ù ÙØ§Ø±Ø¯ بدÙÙ Ø¨Ø±ÙØ²Ø±Ø³Ø§ÙÛ (Refresh) ٠جدد ØµÙØÙ Ø§ÙØ¬Ø§Ù Ù ÛØ´Ùد.
Ú©ÙÙ Ù âAJAXâ Ú©ÙØªØ§Ù شد٠(Asynchronous JavaScript And XML) Ù ÛØ¨Ø§Ø´Ø¯ Ù Ù Ø±Ø¨ÙØ· Ø¨Ù Ø¯Ø±Ø®ÙØ§Ø³Øª ÙØ§Û شبک٠در Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ù¾Ûت است.Ø¨Ù ÙØ± ØØ§ÙØ Ù Ø§ ÙÛØ§Ø²Û ب٠XML ÙØ¯Ø§Ø±Û٠٠اÛ٠عبارت از ØªØ§Ø±ÛØ®ÚÙ AJAX باÙÛ Ù Ø§ÙØ¯Ù است. Ø´Ø§ÛØ¯ اس٠آ٠را Ø´ÙÛØ¯Ù Ø¨Ø§Ø´ÛØ¯.
ÚÙØ¯ÛÙ Ø±ÙØ´ Ø¨Ø±Ø§Û Ø§Ø±Ø³Ø§Ù Ø¨Ù Ø´Ø¨Ú©Ù Ù Ø¯Ø±ÛØ§Ùت Ø§Ø·ÙØ§Ø¹Ø§Øª از Ø³Ø±ÙØ± ÙØ¬Ùد دارد.
Ù
تد fetch() Ù
دÙÛ Ø¬Ø¯ÛØ¯ Ù ÙÙ
Ù Ú©Ø§Ø±Ù Ø§Ø³ØªØ Ø¨ÙØ§Ø¨Ø±Ø§Û٠با اÛÙ Ø±ÙØ´ Ø´Ø±ÙØ¹ Ù
ÛÚ©ÙÛÙ
. Ù
ØªØ§Ø³ÙØ§Ù٠اÛÙ Ø±ÙØ´ ØªÙØ³Ø· Ù
Ø±ÙØ±Ú¯Ø±ÙØ§Û ÙØ¯ÛÙ
Û Ù¾Ø´ØªÛØ¨Ø§ÙÛ ÙÙ
ÛØ´Ùد (Ù
ÛâØªÙØ§Ùد pollyfill Ø´ÙØ¯) اÙ
ا در بÛÙ Ù
Ø±ÙØ±Ú¯Ø± ÙØ§Û Ø¬Ø¯ÛØ¯ØªØ± Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ø¨Ø³ÛØ§Ø± Ø®ÙØ¨Û دارد.
Ø¯Ø³ØªÙØ± اصÙÛ Ø¢Ù Ø¨Ù Ø§Û٠شک٠است:
let promise = fetch(url, [options])
urlâ ÙÛÙÚ© Ø¨Ø±Ø§Û Ø¯Ø³ØªØ±Ø³Û Ø³Ø±ÙØ±optionsâ پارا٠تر ÙØ§Û Ø§Ø®ØªÛØ§Ø±Û:ÙØ¯Ø±ÙاØÙ ØªØ¯ÙØ§ Ù ØºÛØ±Ù
بدÙÙ Ø§Ø³ØªÙØ§Ø¯Ù از پاراÙ
تر options اÛÙ ÛÚ© Ø¯Ø±Ø®ÙØ§Ø³Øª ساد٠GET است Ú©Ù Ù
ØØªÙØ§Û Ø¢Ø¯Ø±Ø³ url را داÙÙÙØ¯ Ù
ÛÚ©ÙØ¯.
Ù Ø±ÙØ±Ú¯Ø± Ø¨ÙØ§ÙاصÙ٠بعد از Ø¯Ø±Ø®ÙØ§Ø³Øª Ø´Ø±ÙØ¹ ب٠کار Ù ÛÚ©ÙØ¯ Ù ÛÚ© پاسخ (Promise) بر٠ÛÚ¯Ø±Ø¯Ø§ÙØ¯Ø Ø¬ÙØ§Ø¨ Ø¨Ø±Ú¯Ø´ØªÛ Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت ÙØªÛØ¬Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛØ´Ùد.
Ø¯Ø±ÛØ§Ùت پاسخ ٠ع٠ÙÙØ§ ÛÚ© ÙØ±Ø§ÛÙØ¯ د٠٠رØÙÙâØ§Û Ø§Ø³Øª.
در ابتدا promise از طرÛÙ fetch Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù Ù
ÛØ´ÙØ¯Ø Ø®Ø±ÙØ¬Û ÛÚ© ÙÙ
ÙÙ٠از Ú©ÙØ§Ø³ داخÙÛ Response است ک٠شاÙ
Ù Ø§Ø·ÙØ§Ø¹Ø§ØªÛ Ù
ث٠Header Ù ØºÛØ±Ù است.
در اÛ٠٠رØÙÙ Ù ÛØªÙاÙÛÙ ÙØ¶Ø¹Ûت HTTP ک٠از طرÛÙ Promise آ٠اد٠شد٠را Ø¨Ø±Ø±Ø³Û Ú©ÙÛ٠تا ببÛÙÛÙ Ø¢ÛØ§ Ù ÙÙÙÛØª Ø¢Ù ÛØ² Ø¨ÙØ¯Ù ÛØ§ Ø®ÛØ±Ø تا ب٠اÛÙØ¬Ø§ بدÙÙ (body) Ø¯Ø±ÛØ§Ùت ÙکردÛÙ .
اگر fetch ÙØ§Ø¯Ø± Ø¨Ù Ø§Ø±Ø³Ø§Ù Ø¯Ø±Ø®ÙØ§Ø³Øª HTTP ÙØ¨Ø§Ø´Ø¯ Promise را رد Ù
ÛÚ©ÙØ¯Ø Ù
Ø«ÙØ§ اگر Ù
Ø´Ú©ÙØ§Øª Ø´Ø¨Ú©Ù ÙØ¬Ùد داشت٠باشد ÛØ§ Ø³Ø§ÛØª Ù
ÙØ±Ø¯ ÙØ¸Ø± در دسترس ÙØ¨Ø§Ø´Ø¯. پاسخâÙØ§Û ØºÛØ± Ù
عÙ
ÙÙ HTTP Ù
اÙÙØ¯ Ø®Ø·Ø§ÙØ§Û 500 ÛØ§ 404 Ø§Ø±ÙØ±Û Ø§ÛØ¬Ø§Ø¯ ÙÙ
ÛâÚ©ÙÙØ¯.
٠ا Ù ÛØªÙاÙÛÙ ÙØ¶ÛØ¹ÛØª HTTP را در ÙÛÚÚ¯ÛâÙØ§Û پاسخ (response properties) Ø¯Ø±ÛØ§ÙØªÛ Ù Ø´Ø§ÙØ¯Ù Ú©ÙÛÙ :
statusâ کد ÙØ¶Ø¹Ûت HTTP Ø Ø¨Ù Ø¹ÙÙØ§Ù ٠ثا٠200.okâ Ù ÙØ¯Ø§Ø± بÙÙÛ Ø¨Ø±Ù ÛÚ¯Ø±Ø¯Ø§ÙØ¯ØØ§Ú¯Ø± ÙØ¶Ø¹Ûت HTTP از کد 200 تا 299 باشدtrueبر٠ÛÚ¯Ø±Ø¯Ø§ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
let response = await fetch(url);
if (response.ok) { // از 200 تا 299 Ø¨ÙØ¯ HTTP اگر ÙØ¶Ø¹Ûت
// Ø¯Ø±ÛØ§Ùت پاسخ بدÙÙ (در Ø²ÛØ± ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯Ù)
let json = await response.json();
} else {
alert("HTTP-Error: " + response.status);
}
در ٠رØÙ٠دÙÙ Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت بدÙ٠پاسخ (response body)Ø Ø¨Ø§ÛØ¯ Ù ØªØ¯Û Ø¯Ûگر را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ .
Ú©ÙØ§Ø³ Response ÚÙØ¯ÛÙ Ù
تد Ù
ختÙ٠بر پاÛÙ promise دارد Ú©Ù Ù
ÛâØªÙØ§ÙÛÙ
بدÙ٠پاسخ را Ø¨Ù ØµÙØ±Øª ÙØ±Ù
تâÙØ§Û Ù
ختÙÙ Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ
:
response.text()â Ø®ÙØ§ÙØ¯Ù پاسخ Ù Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù Ø¢Ù Ø¨Ù ØµÙØ±Øª ٠تÙresponse.json()â ØªØ¨Ø¯Û٠پاسخ ب٠JSONresponse.formData()â Ø¨Ø±Ú¯Ø±Ø¯Ø§Ùد٠پاسخ Ø¨Ù ØµÙØ±Øª Ø´ÛFormData(در ÙØµÙ بعد ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø®ÙØ§Ùد شد)response.blob()â Ø¨Ø±Ú¯Ø±Ø¯Ø§Ùد٠پاسخ Ø¨Ù ØµÙØ±Øª Blob (Ø¯Ø§Ø¯Ù ÙØ§Û باÛÙØ±Û Ù Ø¯ÙØ¯ÙÛÛ)response.arrayBuffer()â Ø¨Ø±Ú¯Ø±Ø¯Ø§Ùد٠پاسخ Ø¨Ù ØµÙØ±Øª ArrayBuffer (Ø¯Ø§Ø¯Ù ÙØ§Û باÛÙØ±Û Ø³Ø·Ø Ù¾Ø§ÛÛÙ)- Ø¹ÙØ§Ù٠بر اÛÙÙØ§
response.bodyÛÚ© Ø´Û ReadableStream است ک٠ب٠ش٠ا Ø§Ù Ú©Ø§Ù Ù ÛØ¯Ùد بدÙ٠را Ø¨Ù ØµÙØ±Øª Ù¾ÛÙØ³ØªÙ ÛØ§ جداجدا Ø¨Ø®ÙØ§ÙÛØ¯.٠ثاÙÛ Ø§Ø² اÛÙ Ù ÙØ±Ø¯ را بعدا Ø®ÙØ§ÙÛØ¯ Ø¯ÛØ¯.
ب٠عÙÙØ§Ù Ù Ø«Ø§Ù Ø¨ÛØ§Ûد ÛÚ© Ø´Û JSON با آخرÛÙ Ú©Ø§Ù ÛØª ÙØ§ را از Ú¯ÛØª ÙØ§Ø¨ Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ :
let url = 'https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits';
let response = await fetch(url);
let commits = await response.json(); // JSON Ø®ÙØ§ÙØ¯Ù ÙØ§Û٠٠تبدÛ٠آ٠بÙ
alert(commits[0].author.login);
ÛØ§ بدÙÙ Ø§Ø³ØªÙØ§Ø¯Ù از await ٠با Ø§Ø³ØªÙØ§Ø¯Ù از Ø¬Ø§ÙØ§Ø§Ø³Ú©Ù¾Ø±Ûت خاÙ
:
fetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits')
.then(response => response.json())
.then(commits => alert(commits[0].author.login));
Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت Ù
ت٠پاسخ Ø¨Ù Ø¬Ø§Û await response.text() از .json() Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯:
let response = await fetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits');
let text = await response.text(); // Ø®ÙØ§Ùد٠پاسخ Ø¨Ù ØµÙØ±Øª Ù
تÙÛ
alert(text.slice(0, 80) + '...');
ب٠عÙÙØ§Ù ÛÚ© ÙÙ
ÙÙÙ Ø¨Ø±Ø§Û Ø®ÙØ§ÙØ¯Ù Ø¨Ù ØµÙØ±Øª ÙØ±Ù
ت Ø¯ÙØ¯ÙÛÛØ Ø¨ÛØ§ÛÛØ¯ ÙÙÚ¯ÙÛ Ø³Ø§ÛØª fetch specification را Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ
(Ø¨Ù ÙØµÙ Blob Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت Ø¬Ø²Ø¦ÛØ§Øª دربار٠عÙ
ÙÛØ§Øª رÙÛ Blob Ù
راجع٠کÙÛØ¯):
let response = await fetch('/article/fetch/logo-fetch.svg');
let blob = await response.blob(); // blob داÙÙÙØ¯ ب٠عÙÙØ§Ù Ø´Û
// Ø¨Ø±Ø§Û Ø§Ø³ØªÙØ§Ø¯Ù از Ø¢Ù <img> ساخت تگ
let img = document.createElement('img');
img.style = 'position:fixed;top:10px;left:10px;width:100px';
document.body.append(img);
// ÙÙ
Ø§ÛØ´ عکس
img.src = URL.createObjectURL(blob);
setTimeout(() => { // Ù
Ø®ÙÛ Ú©Ø±Ø¯Ù Ø¹Ú©Ø³ بعد از س٠ثاÙÛÙ
img.remove();
URL.revokeObjectURL(img.src);
}, 3000);
٠ا ÙÙØ· Ù ÛâØªÙØ§ÙÛ٠ب٠ÛÚ© Ø±ÙØ´ بدÙ٠را Ø¨Ø®ÙØ§ÙÛÙ .
اگر ÙØ¨Ùا پاسخ را Ø¨Ù ØµÙØ±Øª response.text()Ø¯Ø±ÛØ§Ùت Ú©Ø±Ø¯ÛØ¯ دÛگر ÙÙ
ÛâØªÙØ§ÙÛØ¯ پاسخ را Ø¨Ù ØµÙØ±Øª response.json() Ø¯Ø±ÛØ§Ùت Ú©ÙÛØ¯Ø Ø²ÛØ±Ø§ Ù
ØØªÙØ§Û Ø¨Ø¯Ù٠از ÙØ¨Ù پردازش شد٠است.
let text = await response.text(); // پاسخ پردازش Ù
ÛØ´Ùد
let parsed = await response.json(); // با شکست Ù
ÙØ§Ø¬Ù Ù
ÛØ´Ùد (پاسخ از ÙØ¨Ù پردازش شد٠است)
Response headers
Ø±ÛØ³Ù¾Ø§Ùس ÙØ¯Ø±Ùا در ÛÚ© Ø´Û Ù
اÙÙØ¯ Map Ø¨Ù ÙØ§Ù
headers در response.headers در دسترس ÙØ³ØªÙد.
دÙÛÙØ§ Map ÙÛØ³Øª ا٠ا Ø¯Ø§Ø±Ø§Û Ù ØªØ¯ÙØ§Û ٠شابÙÛ Ø§Ø³Øª Ú©Ù Ø§Ù Ú©Ø§Ù Ø¯Ø±ÛØ§Ùت headers را براساس ÙØ§Ù ÛØ§ ØÙÙ٠زد٠رÙÛ Ø¢ÙÙØ§ ÙØ±Ø§ÙÙ Ù ÛÚ©ÙØ¯.
let response = await fetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits');
// Ú¯Ø±ÙØªÙ ÛÚ© ÙØ¯Ø±
alert(response.headers.get('Content-Type')); // application/json; charset=utf-8
// تکرار بر رÙÛ ÙÙ
Ù ÙØ¯Ø±Ùا
for (let [key, value] of response.headers) {
alert(`${key} = ${value}`);
}
Request headers
Ø¨Ø±Ø§Û ØªÙØ¸ÛÙ
ÛÚ© رÛÚ©ÙØ¦Ø³Øª ÙØ¯Ø± در fetch Ù
ÛâØªÙØ§Ù از گزÛÙÙ headers Ø§Ø³ØªÙØ§Ø¯Ù کرد. اÛ٠گزÛÙ٠شاÙ
Ù ÛÚ© Ø´Û Ø®Ø±ÙØ¬Û Ø¨Ù ØµÙØ±Øª Ø²ÛØ± است:
let response = fetch(protectedUrl, {
headers: {
Authentication: 'secret'
}
});
ا٠ا ÙÛØ³ØªÛ از ÙØ¯Ø±ÙØ§Û Ù Ù ÙÙØ¹Ù HTTP ÙØ¬Ùد دارد ک٠٠ا ÙÙ ÛØªÙاÙÛ٠از Ø¢ÙÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ :
Accept-Charset,Accept-EncodingAccess-Control-Request-HeadersAccess-Control-Request-MethodConnectionContent-LengthCookie,Cookie2DateDNTExpectHostKeep-AliveOriginRefererTETrailerTransfer-EncodingUpgradeViaProxy-*Sec-*
اÛÙ ÙØ¯Ø±Ùا اط٠ÛÙØ§Ù Ù ÛØ¯ÙÙØ¯ Ú©Ù HTTP Ø¨Ù Ø¯Ø±Ø³ØªÛ Ù Ø§Û٠٠اجرا Ù ÛØ´ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ú©ÙØªØ±Ù اÛÙ ÙØ¯Ø±Ùا Ø¨Ù ØµÙØ±Øª Ø§ÙØØµØ§Ø±Û ØªÙØ³Ø· Ù Ø±ÙØ±Ú¯Ø± Ø§ÙØ¬Ø§Ù Ù ÛØ´Ùد.
POST requests
Ø¨Ø±Ø§Û ÙØ±Ø³ØªØ§Ø¯Ù Ø±Ú©ÙØ¦Ø³Øª از طرÛÙ POST ÛØ§ ÙØ± Ø¯Ø±Ø®ÙØ§Ø³Øª دÛÚ¯Ø±Û Ø¨Ø§ÛØ¯ از گزÛÙÙâÙØ§Û fetch Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯:
methodâ HTTP-method ٠اÙÙØ¯ :POST,bodyâ Ø¨Ø¯ÙÙ Ø¯Ø±Ø®ÙØ§Ø³ØªØ ÛÚ©Û Ø§Ø² Ù ÙØ§Ø±Ø¯ Ø²ÛØ± است:- ÛÚ© رشت٠(Ù Ø«ÙØ§ JSON ر٠زÙÚ¯Ø§Ø±Û Ø´Ø¯Ù)
- Ø´Û
FormDataØ¨Ø±Ø§Û Ø§Ø±Ø³Ø§Ù Ø¯Ø§Ø¯Ù ÙØ§ Ø¨Ù ØµÙØ±Øªmultipart/form-data Blob/BufferSourceØ¨Ø±Ø§Û Ø§Ø±Ø³Ø§Ù Ø¯Ø§Ø¯Ù ÙØ§Û باÛÙØ±Û- URLSearchParams Ø¨Ø±Ø§Û Ø§Ø±Ø³Ø§Ù Ø¯Ø§Ø¯Ù Ø¨Ø§ رÙ
زÙگارÛ
x-www-form-urlencodedØ Ø¨Ù ÙØ¯Ø±Øª Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛØ´Ùد.
Ø¨ÛØ´ØªØ±ÛÙ Ø§Ø³ØªÙØ§Ø¯Ù ٠ع٠ÙÙØ§ از طرÛÙ JSON Ø§ÙØ¬Ø§Ù Ù ÛØ´Ùد.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØØ§Û٠کد ÛÚ© Ø´Û user را Ø¨Ù ØµÙØ±Øª JSON ارسا٠Ù
ÛÚ©ÙØ¯:
let user = {
name: 'John',
surname: 'Smith'
};
let response = await fetch('/article/fetch/post/user', {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
body: JSON.stringify(user)
});
let result = await response.json();
alert(result.message);
ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ اگر رÛÚ©ÙØ¦Ø³Øª body Ø¨Ù ØµÙØ±Øª Ø±Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø ÙØ¯Ø± Content-Type Ø¨Ù ØµÙØ±Øª Ù¾ÛØ´Ùرض برابر با text/plain;charset=UTF-8 است.
اÙ
ا ÚÙÙ ÙØµØ¯ ارسا٠JSON را دارÛÙ
Ø Ø§Ø² گزÛÙÙ headers Ø¨Ø±Ø§Û Ø§Ø±Ø³Ø§Ù application/json Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛÚ©ÙÛÙ
تا Content-Type Ù
ÙØ§Ø³Ø¨Û Ø¨Ø±Ø§Û JSON باشد.
ارسا٠عکس
Ù
ا ÙÙ
ÚÙÛÙ Ù
ÛâØªÙØ§ÙÛÙ
از طرÛÙ fetch Ø´Û Ø¨Ø§ دادÙâÙØ§Û Ø¯ÙØ¯ÙÛÛ Blob ÛØ§ BufferSource را ارسا٠کÙÛÙ
.
در اÛÙ Ù
ثا٠ÛÚ© Ø¹ÙØµØ± <canvas> ÙØ¬Ùد دارد ک٠با ØØ±Ú©Øª Ù
ÙØ³ رÙÛ Ø¢Ù Ù
ÛâØªÙØ§ÙÛÙ
خط رسÙ
Ú©ÙÛÙ
.با Ú©ÙÛÚ© رÙÛ Ø¯Ú©Ù
Ù Ø§Ø±Ø³Ø§Ù Ø ØªØµÙÛØ± Ø¨Ù Ø³Ø±ÙØ± ارسا٠Ù
ÛØ´Ùد:
<body style="margin:0">
<canvas id="canvasElem" width="100" height="80" style="border:1px solid"></canvas>
<input type="button" value="ارساÙ" onclick="submit()">
<script>
canvasElem.onmousemove = function(e) {
let ctx = canvasElem.getContext('2d');
ctx.lineTo(e.clientX, e.clientY);
ctx.stroke();
};
async function submit() {
let blob = await new Promise(resolve => canvasElem.toBlob(resolve, 'image/png'));
let response = await fetch('/article/fetch/post/image', {
method: 'POST',
body: blob
});
// Ø³Ø±ÙØ± با ÙÙ
Ø§ÛØ´ ØØ¬Ù
عکس پاسخ Ù
ÛØ¯Ùد
let result = await response.json();
alert(result.message);
}
</script>
</body>
ÙØ·Ùا ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ ک٠در اÛÙØ¬Ø§ Ù
ا ÙØ¯Ø± Content-Type را Ø¨Ù ØµÙØ±Øª Ø¯Ø³ØªÛ ØªÙØ¸ÛÙ
ÙÙ
ÛÚ©ÙÛÙ
ØØ²Ûرا ÛÚ© Ø´Û Blob از ÙØ¨Ù ست شد٠است (در اÛÙØ¬Ø§ اÛÙ ÙØ¯Ø± image/png است ÙÙ
Ø§ÙØ·Ùر Ú©Ù ØªÙØ³Ø· تابع toBlob تÙÙÛØ¯ Ù
ÛØ´Ùد). Ø¨Ø±Ø§Û Ø´Û Blob اÛÙ Ù
ÙØ¯Ø§Ø± Ø¨Ø±Ø§Û Content-Type ØªÙØ¸ÛÙ
Ù
ÛØ´Ùد.
تابع submit() Ù
ÛâØªÙØ§Ùد بدÙÙ Ø§Ø³ØªÙØ§Ø¯Ù از async/await Ø¨Ù ØµÙØ±Øª Ø²ÛØ± ÙÙØ´ØªÙ Ø´ÙØ¯:
function submit() {
canvasElem.toBlob(function(blob) {
fetch('/article/fetch/post/image', {
method: 'POST',
body: blob
})
.then(response => response.json())
.then(result => alert(JSON.stringify(result, null, 2)))
}, 'image/png');
}
Ø®ÙØ§ØµÙ
ÛÚ© Ø¯Ø±Ø®ÙØ§Ø³Øª fetch Ù
عÙ
ÙÙØ§ شاÙ
٠دÙÙØ±Ø§Ø®ÙاÙÛ await است:
let response = await fetch(url, options); // پردازش اÙÙÛÙ Ø±ÛØ³Ù¾Ø§Ùس ÙØ¯Ø±
let result = await response.json(); // JSON Ø®ÙØ§Ùد٠بدÙÙ Ø¨Ù ØµÙØ±Øª
ÛØ§ بدÙÙ await:
fetch(url, options)
.then(response => response.json())
.then(result => /* ÙØªÛØ¬Ù ÙØ±Ø§ÛÙØ¯ */)
ÙÛÚÚ¯Û ÙØ§Û Ø±ÛØ³Ù¾Ø§Ùس (Response properties):
response.statusâ کد پاسخ HTTPresponse.okâtrueاگر کد ÙØ¶Ø¹Ûت از 200 تا 299 باشد.response.headersâ Ø´ÛâØ§Û Ù Ø§ÙÙØ¯ Map با ÙØ¯Ø±ÙØ§Û HTTP.
Ù ØªØ¯ÙØ§Û Ø¯Ø±ÛØ§Ùت پاسخ بدÙÙ (response body):
response.text()â Ø¨Ø±Ú¯Ø±Ø¯Ø§Ù پاسخ Ø¨Ù ØµÙØ±Øª ٠تÙresponse.json()â ØªØ¨Ø¯Û٠پاسخ ب٠JSONresponse.formData()â Ø¨Ø±Ú¯Ø±Ø¯Ø§Ùد٠پاسخ Ø¨Ù ØµÙØ±Øª Ø´ÛFormData(در ÙØµÙ بعد ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø®ÙØ§Ùد شد)response.blob()â Ø¨Ø±Ú¯Ø±Ø¯Ø§Ùد٠پاسخ Ø¨Ù ØµÙØ±Øª Blob (Ø¯Ø§Ø¯Ù ÙØ§Û باÛÙØ±Û Ù Ø¯ÙØ¯ÙÛÛ)response.arrayBuffer()â Ø¨Ø±Ú¯Ø±Ø¯Ø§Ùد٠پاسخ Ø¨Ù ØµÙØ±Øª ArrayBuffer (Ø¯Ø§Ø¯Ù ÙØ§Û باÛÙØ±Û Ø³Ø·Ø Ù¾Ø§ÛÛÙ)
گزÛÙÙâÙØ§Û fetch تا Ø§ÙØ§Ù:
methodâ HTTP-methodheadersâ ÛÚ© Ø´Û Ø¨Ø§ Ø¯Ø±Ø®ÙØ§Ø³ØªâÙØ§Û ÙØ¯Ø± (ÙØ± ÙØ¯Ø±Û ٠جاز ÙÛØ³Øª)bodyâ Ø¯Ø§Ø¯ÙâÙØ§ÛÛ Ú©Ù Ù ÛØ®ÙاÙÛ٠ارسا٠کÙÛÙ (request body) Ù ÛâØªÙØ§Ùد Ø¨Ù ØµÙØ±Øªstring,FormData,BufferSource,BlobÛØ§UrlSearchParamsباشد.
در ÙØµÙâÙØ§Û Ø¨Ø¹Ø¯ÛØÚ¯Ø²ÛÙÙâÙØ§ Ù Ù
ÙØ§Ø±Ø¯ Ø¨ÛØ´ØªØ±Û ازfetch را Ø®ÙØ§ÙÛÙ
Ø¯ÛØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)