توفر واجهة fetch() الأصلية في جافا سكريبت واجهة غير متزامنة خفيفة لإجراء طلبات الشبكة عبر المتصفحات الحديثة وبيئة Node.js.
الطلبات الأساسية
طلب GET (جلب كائن JSON)
async function loadUserData() {
const response = await fetch('https://api.example.com/user/1');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
}
طلب POST (إرسال حمولة JSON)
async function createUser(payload) {
const response = await fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify(payload)
});
return await response.json();
}
إرسال بيانات النماذج (multipart/form-data)
const formData = new FormData();
formData.append('username', 'alice');
formData.append('avatar', fileInput.files[0]);
// لا تضع ترويسة Content-Type يدويا حتى يضبطها المتصفح مع الحد الفاصل تلقائيا
await fetch('/upload', {
method: 'POST',
body: formData
});
إلغاء الطلبات والمهلة الزمنية (AbortController)
const controller = new AbortController();
const signal = controller.signal;
// إلغاء الطلب تلقائيا بعد 5 ثوان
const timeoutId = setTimeout(() => controller.abort(), 5000);
try {
const res = await fetch('https://api.example.com/data', { signal });
const data = await res.json();
clearTimeout(timeoutId);
return data;
} catch (err) {
if (err.name === 'AbortError') {
console.warn('انتهت المهلة الزمنية للطلب أو تم إلغاؤه');
} else {
console.error('Fetch error:', err);
}
}
الترويسات والمصادقة والاعتمادات
const headers = new Headers();
headers.set('Authorization', 'Bearer token_xyz123'); // ترويسة مصادقة الرمز المميز Bearer
headers.set('X-Custom-Header', 'custom-value');
const response = await fetch('/api/secure', {
headers,
credentials: 'include' // إرسال ملفات تعريف الارتباط Cookies مع الطلبات عبر النطاقات
});