FA-TOOLS — Header Component
آموزش ajax در جاوا اسکریپت

آموزش کامل AJAX در جاوا اسکریپت: از مفاهیم پایه تا کاربرد عملی

با یادگیری AJAX می‌توانید بدون نیاز به بارگذاری مجدد (Refresh) کل صفحه، داده‌ها را از سرور دریافت یا به آن ارسال کنید و بخش‌های مختلف وب‌سایت را تعاملی سازید. این تکنیک نه‌تنها سرعت برنامه‌های وب را چند برابر می‌کند، بلکه مصرف پهنای باند را کاهش داده و تجربه کاربری نرم و مدرنی ایجاد می‌کند. در این مقاله، تمامی روش‌های ارسال درخواست‌های ایجکس در جاوا اسکریپت را به همراه پروژه‌های عملی و نکات عیب‌یابی بررسی خواهیم کرد.

فهرست مطالب

  • ایجکس (AJAX) چیست و چگونه کار می‌کند؟
  • روش‌های پیاده‌سازی AJAX در جاوا اسکریپت
  • مقایسه XMLHttpRequest و Fetch API
  • مراحل پیاده‌سازی یک پروژه واقعی ارسال داده
  • مدیریت خطاها و نکات امنیتی در ایجکس
  • عیب‌یابی سریع مشکلات رایج AJAX
  • پرسش‌های متداول

خلاصه نکات کلیدی مقاله:

  • AJAX مجموعه‌ای از تکنیک‌ها برای تبادل ناهمگام داده با سرور بدون رفرش صفحه است.
  • امروزه استاندارد اصلی پیاده‌سازی ایجکس در جاوا اسکریپت استفاده از Fetch API همراه با async/await است.
  • برای مدیریت بهتر چرخه درخواست‌ها، همواره باید خطاها با بلوک try...catch یا .catch() مدیریت شوند.
  • ارسال هدرهای درست (مثل Content-Type) و رعایت اصول CORS برای ارتباط موفق با API ضروری است.

ایجکس (AJAX) چیست و چگونه کار می‌کند؟

ایجکس (AJAX) چیست و چگونه کار می‌کند؟

ایجکس (مخفف Asynchronous JavaScript and XML) تکنیکی است که به مرورگر اجازه می‌دهد بدون بازخوانی کل صفحه وب، با سرور ارتباط برقرار کرده و داده‌ها را مبادله کند. این فرآیند به‌صورت ناهمگام (Asynchronous) انجام می‌شود؛ یعنی سایر کدهای صفحه بدون معطل ماندن برای پاسخ سرور به اجرای خود ادامه می‌دهند.

در وب‌سایت‌های سنتی، هر بار که کاربر روی دکمه‌ای کلیک می‌کرد یا فرمی را می‌فرستاد، کل صفحه وب مجدداً از سرور بارگیری می‌شد. اما با AJAX، مرورگر یک درخواست HTTP در پس‌زمینه می‌فرستد، پاسخ را در قالب JSON یا HTML دریافت می‌کند و فقط همان بخش موردنظر را آپدیت می‌کند. تسلط بر مرور عناصر صفحه و تغییر آن‌ها با کدهای برنامه بسیار حیاتی است؛ بنابراین مطالعه مقاله آموزش dom در جاوا اسکریپت درک بهتری از چگونگی اعمال این داده‌های جدید روی صفحه به شما می‌دهد.

روش‌های پیاده‌سازی AJAX در جاوا اسکریپت

روش‌های پیاده‌سازی AJAX در جاوا اسکریپت

برای ارسال درخواست‌های ایجکس در جاوا اسکریپت، دو روش نیتیو (اصلی) و چندین کتابخانه خارجی وجود دارد. در ادامه هر سه شیوه را کاملاً بررسی می‌کنیم.

۱. روش کلاسیک: شیء XMLHttpRequest

این روش سنتی‌ترین شیوه ساخت درخواست ایجکس است که از مرورگرهای قدیمی پشتیبانی می‌کند، اما ساختار کدنویسی آن به‌دلیل استفاده از Callbackها کمی پیچیده و طولانی است.

// ساخت شیء جدید
const xhr = new XMLHttpRequest();

// تنظیم درخواست (نوع درخواست، آدرس API، ناهمگام بودن)
xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1', true);

// تعریف رفتار مرورگر پس از دریافت پاسخ
xhr.onload = function() {
  if (xhr.status === 200) {
    const data = JSON.parse(xhr.responseText);
    console.log('داده دریافت شد:', data);
  } else {
    console.error('خطا در دریافت داده. کد وضعیت:', xhr.status);
  }
};

// ارسال درخواست
xhr.send();

۲. روش مدرن: استاندارد Fetch API

دستور Fetch جایگزین مدرن XMLHttpRequest است که بر پایه Promiseها کار می‌کند و خوانایی فوق‌العاده بالاتری دارد. برای دسترسی به نمونه‌های بیشتر می‌توانید از کدهای جاوا اسکریپت آماده در برنامه‌نویسی روزمره بهره ببرید.

// استفاده از Fetch با Async/Await
async function getPostData() {
  try {
    const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
    
    if (!response.ok) {
      throw new Error(`خطای شبکه: ${response.status}`);
    }
    
    const data = await response.json();
    console.log('اطلاعات پست:', data);
  } catch (error) {
    console.error('مشکل در برقراری ارتباط:', error);
  }
}

getPostData();

مقایسه XMLHttpRequest و Fetch API

مقایسه XMLHttpRequest و Fetch API

برای انتخاب مناسب‌ترین ابزار در پروژه‌های خود، جدول زیر تفاوت‌های اصلی این دو ابزار نیتیو جاوا اسکریپت را نشان می‌دهد:

ویژگی توضیحات و مقایسه
ساختار پایه کد XMLHttpRequest بر پایه Eventها است، در حالی که Fetch بر پایه Promiseها طراحی شده است.
خوانایی و تمیزی کد Fetch با ساختار async/await کدی بس بسیار تمیزتر و بدون لایه‌های تو در تو ارائه می‌دهد.
پیگیری پیشرفت آپلود/دانلود XMLHttpRequest رویداد native برای Progress دارد؛ Fetch این قابلیت را به‌سادگی ندارد.
ارسال کوکی‌ها به‌صورت خودکار XMLHttpRequest به‌طور خودکار کوکی را ارسال می‌کند، ولی Fetch نیاز به تنظیم گزینه‌ی credentials دارد.

مراحل پیاده‌سازی یک پروژه واقعی ارسال داده (POST Request)

مراحل پیاده‌سازی یک پروژه واقعی ارسال داده (POST Request)

ارسال فرم‌ها یکی از رایج‌ترین کاربردهای ایجکس است. برای مثال هنگام ساخت فرم ثبت‌نام یا در روند طراحی سایت فروشگاهی با وردپرس برای تغییر تعداد محصولات در سبد خرید بدون رفرش، از درخواست روش POST استفاده می‌شود.

  1. دستکاری رویداد Submit فرم برای جلوگیری از رفرش شدن صفحه (با استفاده از e.preventDefault()).
  2. استخراج داده‌های ورودی کاربر از عناصر HTML.
  3. تبدیل داده‌ها به فرمت JSON استاندارد.
  4. ارسال درخواست با تنظیم متد POST و مشخص کردن Headers.
  5. نمایش پاسخ سرور روی صفحه وب و پاک‌سازی فرم.
async function sendUserData(userInfo) {
  try {
    const response = await fetch('https://reqres.in/api/users', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
      },
      body: JSON.stringify(userInfo)
    });

    const result = await response.json();
    console.log('پاسخ سرور با موفقیت دریافت شد:', result);
    alert('کاربر با موفقیت ثبت شد!');
  } catch (error) {
    console.error('خطا در ارسال اطلاعات:', error);
  }
}

// فراخوانی نمونه
sendUserData({ name: "Ali", job: "Developer" });

مدیریت خطاها و نکات امنیتی در ایجکس

مدیریت خطاها و نکات امنیتی در ایجکس

هنگام کار با شبکه همیشه احتمال بروز خطا وجود دارد (قطعی اینترنت، اشتباه بودن آدرس یا عدم پاسخگویی سرور). برای داشتن یک برنامه مطمئن باید موارد زیر را حتماً رعایت کنید:

  • بررسی ویژگی response.ok: تابع fetch خطاهای HTTP مانند ۴۰۴ یا ۵۰۰ را به‌صورت خودکار در بلوک catch نمی‌اندازد. حتماً باید وضعیت response.ok را چک کنید.
  • خطای CORS (Cross-Origin Resource Sharing): اگر دامنه مرورگر با دامنه API متفاوت باشد، سرور مقصد باید مجوز لازم را در هدرهای پاسخ (Access-Control-Allow-Origin) فرستاده باشد.
  • محافظت در برابر CSRF: هنگام ارسال داده‌های حساس در سامانه، همیشه توکن‌های امنیتی (مانند Nonce در وردپرس) را در هدر درخواست بگنجانید. اگر در دنیای وردپرس فعالیت می‌کنید، بررسی قطعه‌کدهای مرتبط در تکه‌کدهای وردپرس برای ارسال درست درخواست‌های AJAX توصیه می‌شود.

عیب‌یابی سریع مشکلات رایج AJAX

در صورت مواجهه با خطا هنگام ارسال درخواست‌های ایجکس، موارد زیر متداول‌ترین راه‌حل‌های عملی هستند:

۱. خطای CORS Error در کنسول مرورگر

علت: عدم اجازه سرور مقصد به دامنه شما.
راه‌حل: هدر Access-Control-Allow-Origin: * را در سرور تنظیم کنید یا درخواست را از طریق پروکسی سمت سرور ارسال نمایید.

۲. خطای Uncaught SyntaxError: Unexpected token در JSON

علت: سرور به‌جای فرمت JSON، خروجی متن ساده، HTML یا خطا ارجاع داده است.
راه‌حل: تب Network در مرورگر را باز کرده و پاسخ واقعی (Response) را چک کنید تا ببینید خروجی دقیقاً چیست.

۳. عدم به‌روزرسانی اطلاعات پس از ارسال فرم

علت: عدم جلوگیری از رفتار پیش‌فرض فرم HTML.
راه‌حل: در اولین خط تابع شنونده رویداد submit، از event.preventDefault() استفاده کنید.

پرسش‌های متداول

آیا ایجکس یک زبان برنامه‌نویسی جدید است؟

خیر، AJAX زبان برنامه‌نویسی نیست؛ بلکه تکنیکی برای ترکیب جاوا اسکریپت و درخواست‌های ناهمگام HTTP است.

آیا برای کار با AJAX نیاز به کتابخانه jQuery داریم؟

خیر، امروزه با وجود Fetch API قدرتمند و نیتیو در جاوا اسکریپت مدرن، هیچ نیازی به نصب کتابخانه‌های سنگین مانند جی‌کوئری وجود ندارد.

فرمت داده‌ها در ایجکس حتماً باید XML باشد؟

خیر، علی‌رغم نام XML در کلمه ایجکس، در حال حاضر فرمت سبک و سریع JSON جایگزین اصلی و استاندارد آن شده است.

تفاوت درخواست asynchronous و synchronous چیست؟

در حالت ناهمگام (Asynchronous)، مرورگر در زمان انتظار برای پاسخ سرور قفل نمی‌شود و کاربر می‌تواند به کار با وب‌سایت ادامه دهد. اما در حالت همگام (Synchronous)، تا زمان دریافت پاسخ کل مرورگر متوقف می‌شود.

سوالات متداول

ایجکس (AJAX) چیست و چه کاربردی دارد؟

ایجکس تکنیکی است که امکان تبادل ناهمگام داده‌ها با سرور را بدون نیاز به بازخوانی کامل صفحه فراهم می‌کند. این کار باعث افزایش سرعت، بهبود تجربه کاربری و کاهش مصرف پهنای باند می‌شود.

تفاوت اصلی XMLHttpRequest و Fetch API چیست؟

متد Fetch API مدرن‌تر بوده و بر پایه Promiseها عمل می‌کند که باعث خوانایی بهتر کد می‌شود. در حالی که XMLHttpRequest قدیمی‌تر است و ساختار پیچیده‌تری مبتنی بر رویدادها دارد.

چرا در Fetch API باید وضعیت response.ok بررسی شود؟

زیرا تابع fetch خطاهای HTTP مانند کدهای ۴۰۴ یا ۵۰۰ را به‌صورت خودکار به بلوک catch منتقل نمی‌کند و باید وضعیت موفقیت پاسخ را به‌صورت دستی بررسی کرد.

خطای CORS در درخواست‌های ایجکس چیست؟

این خطا زمانی رخ می‌دهد که دامنه مرورگر با دامنه API مقصد متفاوت باشد. برای حل آن، سرور مقصد باید مجوز لازم را در هدرهای پاسخ تنظیم کرده باشد.

Table of Contents

آخرین نوشته‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *