آموزش جامع Fetch API در جاوااسکریپت
🎯 اهداف یادگیری
- درک مفهوم Fetch API و کاربردهای آن
- یادگیری نحوه ارسال درخواستهای GET و POST
- مدیریت پاسخهای سرور و خطاها
- کار با JSON و فرمها در Fetch API
📌 Fetch API چیست؟
Fetch API یک رابط مدرن و قدرتمند در جاوااسکریپت برای انجام درخواستهای HTTP است که جایگزین روش قدیمی XMLHttpRequest شده است:
javascript
// سادهترین مثال استفاده از Fetch APIfetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('خطا:', error));
مزایای Fetch API:
- سینتکس ساده و خوانا: بر پایه Promiseها و بسیار تمیزتر از XMLHttpRequest
- پشتیبانی از استانداردهای جدید: مانند CORS، Streams و Service Workers
- انعطافپذیری بالا: امکان تنظیم هدرها، متدها و سایر جزئیات درخواست
📌 درخواست GET با Fetch
برای دریافت داده از سرور از متد GET استفاده میکنیم:
javascript
// دریافت داده از یک API عمومیfetch('https://jsonplaceholder.typicode.com/posts/1') .then(response => { if (!response.ok) { throw new Error(`خطای HTTP: ${response.status}`); } return response.json(); }) .then(data => console.log(data)) .catch(error => console.error(error));
نکات مهم درخواست GET:
- بررسی وضعیت پاسخ: همیشه response.ok را بررسی کنید
- تبدیل پاسخ: برای JSON از .json()، برای متن از .text() استفاده کنید
- مدیریت خطا: خطاهای شبکه و HTTP را مدیریت کنید
📌 درخواست POST با Fetch
برای ارسال داده به سرور از متد POST استفاده میکنیم:
javascript
// ارسال داده به سرور با متد POSTconst newPost = { title: 'عنوان پست جدید', body: 'متن پست جدید...', userId: 1};fetch('https://jsonplaceholder.typicode.com/posts', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(newPost),}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error));
نکات مهم درخواست POST:
- تنظیم method: حتما متد را به 'POST' تنظیم کنید
- تنظیم هدرها: Content-Type را برای JSON تنظیم کنید
- تبدیل داده: آبجکت را با JSON.stringify به رشته تبدیل کنید
- مدیریت پاسخ: مانند GET پاسخ را مدیریت کنید
📌 مدیریت خطا در Fetch
در Fetch API باید دو نوع خطا را مدیریت کنید:
javascript
// مدیریت جامع خطاها در Fetchfetch('https://api.example.com/data') .then(response => { if (!response.ok) { throw new Error(`خطای HTTP: ${response.status}`); } return response.json(); }) .then(data => console.log(data)) .catch(error => { if (error.message.includes('Failed to fetch')) { console.error('خطای شبکه: اتصال به سرور ممکن نیست'); } else { console.error('خطا:', error.message); } });
انواع خطاها:
- خطاهای شبکه: وقتی ارتباط با سرور قطع است
- خطاهای HTTP: وقتی سرور پاسخ غیرموفق (مثل 404 یا 500) میدهد
- خطاهای پردازش پاسخ: مثلا وقتی JSON نامعتبر است
📌 کار با Async/Await و Fetch
برای خوانایی بیشتر میتوانیم از Async/Await با Fetch استفاده کنیم:
javascript
async function getUserData(userId) { try { const response = await fetch(`https://api.example.com/users/${userId}`); if (!response.ok) { throw new Error('کاربر یافت نشد'); } const user = await response.json(); console.log(user); return user; } catch (error) { console.error('خطا در دریافت داده کاربر:', error.message); throw error; // برای مدیریت در سطح بالاتر }}
مزایای استفاده از Async/Await:
- خوانایی بیشتر: کد شبیه برنامهنویسی همزمان میشود
- مدیریت خطا آسانتر: با try/catch قابل مدیریت است
- جریان کنترل واضح: ترتیب اجرا واضح و خطی است
📌 تمرین عملی
تابع زیر را تکمیل کنید تا با استفاده از Fetch API اطلاعات آب و هوا را از یک API عمومی دریافت کند:
javascript
async function getWeather(city) { // این تابع باید اطلاعات آب و هوای شهر مورد نظر را دریافت کند // از API OpenWeatherMap یا API مشابه استفاده کنید // خطاها را به درستی مدیریت کنید // نتیجه را به صورت یک آبجکت برگردانید}
راهنمای تمرین:
- از API رایگان مانند OpenWeatherMap استفاده کنید (نیاز به ثبتنام دارد)
- شهر مورد نظر را به عنوان پارامتر دریافت کنید
- درخواست GET به API ارسال کنید
- پاسخ را به JSON تبدیل کنید
- خطاهای شبکه و HTTP را مدیریت کنید
- دادههای مربوطه (دما، وضعیت هوا و...) را برگردانید
📌 قدم بعدی
در درس بعدی با ماژولها در جاوااسکریپت آشنا خواهیم شد!