مرجع سريع

ورقة غش واجهة برمجة التطبيقات Fetch في جافا سكريبت

دليل مرجعي سريع لدالة fetch() الأصلية في جافا سكريبت: طلبات GET و POST، ترويسات Headers، إرسال FormData وإلغاء الطلبات عبر AbortController.

· تاريخ النشر

توفر واجهة 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 مع الطلبات عبر النطاقات
});

مراجع ذات صلة

موضوعات ذات صلة