در جاوااسکریپت، وقتی دربارهٔ “درخواست HTTP” (HTTP Request) صحبت می‌کنیم، در واقع به فرآیندی اشاره می‌کنیم که کد جاوااسکریپت (عموماً در یک مرورگر یا محیطی مانند Node.js) برای دریافت یا ارسال داده به یک سرور تحت پروتکل HTTP انجام می‌دهد. به عبارت دیگر، شما با استفاده از یک سری متدها و APIها به یک URL یا آدرس وب خاص درخواست (Request) ارسال می‌کنید و در پاسخ (Response) داده‌هایی را دریافت می‌کنید.


چرا درخواست HTTP؟

دریافت داده: برای مثال درخواست داده از یک سرور (دریافت JSON یا فایل).

ارسال داده: برای مثال ثبت اطلاعات فرم یا لاگین در یک وب‌سایت.

ارتباط بلادرنگ: استفاده از روش‌هایی مانند WebSocket یا فریم‌ورک‌ها برای ارتباط زنده با سرور.


نحوه انجام درخواست HTTP در جاوااسکریپت

   +-------------------+
   |    مرورگر (Browser) 
   |  یا JavaScript App
   +---------+---------+
             |
       (HTTP Request)
             |
             v
      +----------------+
      |     سرور       |
      | (Server/API)  |
      +--------+------+
               ^
               |
        (HTTP Response)
               |

1. استفاده از Fetch API

Fetch یک API جدیدتر و ساده‌تر برای ارسال و دریافت درخواست‌های HTTP است که در اکثر مرورگرهای مدرن پشتیبانی می‌شود:

fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('خطا در دریافت پاسخ سرور');
    }
    return response.json();
  })
  .then(data => {
    console.log('داده دریافت شده:', data);
  })
  .catch(error => {
    console.error('مشکل در درخواست:', error);
  });

مزایا: ساده‌تر و ساختار کد خواناتر نسبت به XMLHttpRequest قدیمی. همچنین پشتیبانی از Promise در جاوااسکریپت.

معایب: در برخی مرورگرهای قدیمی ممکن است نیاز به پلی‌فیل (Polyfill) داشته باشید. ضمناً handling دقیق خطاها کمی ظریف است (مثلاً خطای شبکه با خطای پاسخ سرور متفاوت است).


2. استفاده از Async/Await

استفاده از async/await کد شما را خواناتر می‌کند:

async function getData() {
  try {
    const response = await fetch('https://api.example.com/data');
    if (!response.ok) {
      throw new Error('خطا در دریافت پاسخ سرور');
    }
    const data = await response.json();
    console.log('داده دریافت شده:', data);
  } catch (error) {
    console.error('مشکل در درخواست:', error);
  }
}
getData();

3. استفاده از XMLHttpRequest (روش قدیمی‌تر)

قبل از Fetch API و کتابخانه‌های جدید، XMLHttpRequest استاندارد اولیه برای ایجاد درخواست‌های HTTP بود:

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);

xhr.onload = function() {
  if (xhr.status === 200) {
    console.log('داده دریافت شده:', xhr.responseText);
  } else {
    console.error('خطا در دریافت داده:', xhr.status);
  }
};

xhr.onerror = function() {
  console.error('خطای شبکه یا مشکل در برقراری ارتباط با سرور');
};

xhr.send();

مزایا: گسترده‌ترین پشتیبانی در مرورگرهای قدیمی.

معایب: پیچیده‌تر بودن کد و مدیریت سخت‌تر Promiseها و پاسخ‌ها.


4. کتابخانه‌ها و فریمورک‌ها

Axios: کتابخانه‌ای محبوب برای ارسال درخواست HTTP که Promiseها و مدیریت خطا را راحت‌تر می‌کند.

jQuery.ajax: در صورت استفاده از jQuery، می‌توانید با $.ajax() درخواست ارسال کنید.


نکاتی پیرامون درخواست HTTP در جاوااسکریپت

روش (Method): مانند GET, POST, PUT, DELETE که در سرورهای RESTful بسیار کاربردی‌اند.

هدرها (Headers): برای ارسال اطلاعات اضافی مانند نوع محتوا (Content-Type) یا توکن احراز هویت (Authorization) استفاده می‌شوند.

بدنه (Body): در درخواست‌های POST یا PUT، معمولاً داده‌ها در قالب JSON، فرم یا فرمت دیگر ارسال می‌شوند.

وضعیت پاسخ (Status Code): برای تشخیص نتیجهٔ درخواست باید به کد وضعیت سرور (مانند 200, 404, 500 و غیره) توجه کرد.

مدیریت خطا: شامل شناسایی خطاهای شبکه (قطع اینترنت یا سرور ناموجود) و خطاهای مرتبط با پاسخ (کدهای 4xx یا 5xx) است.


جمع‌بندی

به طور خلاصه، “درخواست HTTP در جاوااسکریپت” ابزاری است برای برقرار کردن ارتباط با سرور، گرفتن و ارسال داده‌ها. روش‌های مختلفی (مانند Fetch API یا XMLHttpRequest) برای پیاده‌سازی آن وجود دارد که هر یک مزایا و معایب خود را دارند. در مرورگرهای امروزی، Fetch (همراه با async/await) یکی از رایج‌ترین و ساده‌ترین گزینه‌هاست.