**اِیْ‌جکس** (*AJAX*؛ سرواژهٔ ***A**synchronous **J**avaScript **A**nd **X**ML*)، مجموعه‌ای از استانداردها و فناوری‌های وب است که به کمک آن‌ها می‌توان برنامه‌هایی مبتنی بر وب تولید کرد که به آسانی با کاربران تعامل داشته باشند. با استفاده از این فناوری‌ها و با کمک انتقال تکه‌های کوچک داده و اطلاعات از رایانهٔ خادم (Server)، صفحات وب از حالت منفعل خارج می‌شوند و واکنش‌هایی مناسب با رویدادها انجام می‌دهند. ایجکس معماری جدیدی برای برنامه‌های تحت وب است، که با سرعت بسیار زیادی در حال گسترش بوده و کمتر کاربری در اینترنت وجود دارد که هنوز گذرش به یکی از صفحاتی که با این معماری ساخته شده‌اند نیفتاده باشد و از قابلیت‌های فوق‌العاده ی آن بهره‌مند نشده باشد. Gmail, Google Map, Google Suggest, Orkut، و اسامی آشنای دیگر، نمونه‌هایی هستند از کاربرد ایجکس. با استفاده از این معماری، صفحات وب تعامل بسیار خوبی با کاربران خواهند داشت. بعلاوه، مهم‌ترین مزیت این معماری آن است که دیگر برای انجام هر کاری لازم نیست صفحه وب دوباره بارگذاری شود. در این مقاله به بررسی تاریخچه، اصول، و شیوهٔ انجام کارها در این معماری خواهیم پرداخت.

مجموعه فناوری‌های تشکیل دهنده ای‌جکس عبارتند از:

* نمایش استاندارد با استفاده از اکس‌اچ‌تی‌ام‌ال و سی‌اس‌اس
* نمایش پویایی و تعاملات با استفاده از مدل شیءگرای سند
* تبادل و دستکاری داده‌ها با استفاده از XML و تبدیلات اکس‌اس‌ال،
* بازیابی داده‌ها به صورت غیر همروند با استفاده از XMLHttpRequest،
* نهایتاً جاوااسکریپت برای سرهم‌بندی همه چیز با هم.

پیشینه
------

واژه ایجکس را برای اولین بار Jesse James Garrett در فوریه سال ۲۰۰۵ در مقاله Ajax: A New Approach to Web Applications استفاده کرد. اگرچه نام ایجکس برای نخستین بار در سال ۲۰۰۵ ابداع شد، اما تاریخچه اکثر فناوری‌هایی که به ایجکس منتهی شدند به حدود یک دهه قبل و ابتکارات مایکروسافت در اسکریپت‌ نویسی از راه دور بازمی‌گردد. با این حال تاریخچه فناوری‌هایی برای بارگذاری غیرهمروند محتویات یک صفحه وب، بدون نیاز به بارگذاری دوباره صفحه، به عناصر **IFRAME** (که در سال ۱۹۹۶ در نسخه ۳ IE ارائه شد) و عناصر **LAYER** (که در سال ۱۹۹۷ در نسخه ۴ مرورگر نت‌اسکیپ ارائه شد، اما در نسخه‌های اخیر موزیلا متروکه شده‌است) بازمی‌گردد. هردوی این عناصر، یک خصوصیت src دارند که می‌تواند یک آدرس URL خارجی را شامل شود و به این ترتیب اگر صفحه‌ای شامل یک کد جاوااسکریپت بارگذاری شود که صفحه والد را دستکاری می‌کند، نتیجه‌ای شبیه ایجکس خواهیم داشت.

اسکریپت نویسی از راه دور مایکروسافت (یا MSRS که در سال ۱۹۹۸ مطرح شد) جایگزین مناسب‌تری برای تکنیک‌های گذشته به نظر می‌رسید. در این روش، داده‌ها به‌وسیله یک جاوا اپلت دریافت می‌شد، و در سمت کلاینت برقراری ارتباط به‌وسیله جاوااسکریپت انجام می‌گرفت. این روش در نسخه‌های ۴ و بعدتر اینترنت اکسپلورر و نت‌اسکیپ پشتیبانی می‌شود.

مایکروسافت در نسخهٔ ۵ اینترنت اکسپلورر شیء XMLHttpRequest را ارائه کرده و برای اولین بار در هات‌میل که در *Microsoft Exchange Server ۲۰۰۰* ارائه شد، از این روش با استفاده از شی XMLHttpRequest بهره جست.

در نهایت با تغییر و تحولاتی که در این مسیر به وجود آمد و جایگزینی شیء XMLHttpRequest به جای جاوا اپلت، اکنون روشی برای اسکریپت نویسی از راه دور متداول شده که آن را با عنوان ایجکس می‌شناسیم.

اما آنچه باعث شد پس از این مدت، ناگهان توجه‌ها به سمت ایجکس جلب شود، تمرکز شرکت گوگل بر این معماری بود. وب‌سایت‌هایی از قبیل Google Map، جی‌میل و فهرست محصولات گوگل پروژه‌هایی بودند که باعث شد توجه کاربران، چه کاربران عادی و چه کاربران حرفه‌ای، به نحوه کار آن‌ها جلب شود.

ایجکس به عنوان معماری جدیدی برای وب
-----------------------------------

روش کار برنامه‌های کلاسیک وب چیزی شبیه این است: اکثر تعاملات کاربر با رابط کاربری باعث ارسال یک درخواست به سرور می‌شود. سرور پردازش‌های لازم را انجام داده و سپس یک صفحه HTML به کلاینت بازمی‌گرداند. این مدل بر اساس هدف اصلی وب، یعنی ایفای نقش یک رسانه برای ابرمتن است. اما آنچه وب را برای ابرمتن‌ها مناسب می‌کند، الزاماً آن را برای برنامه‌های نرم‌افزاری نیز مناسب ==نخواهد== کرد. مورد اینجاست که برنامه‌های وب برای کاربرد (Application) بودن طراحی نشده‌اند و این باعث شده‌است که در بسیاری موارد کاربر را نادیده بگیرند.

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

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

ایجکس چیست
----------

ایجکس یک تکنولوژی نیست؛ بلکه مجموعه‌ایست از تکنولوژی‌هایی که هر یک در جای خود تکنولوژی کامل و موفقی هستند، و اکنون به شکل جدیدی در کنار هم قرار گرفته و ایجکس را تشکیل داده‌اند [۲]. تکنولوژی‌هایی که در ایجکس از آن‌ها استفاده می‌شود عبارت‌اند از:

* نمایش استاندارد با استفاده از XHTML و CSS.
* نمایش پویایی و تعاملات با استفاده از Document Object Model (DOM).
* تبادل و دستکاری داده با استفاده از XML و XSLT.
* بازیابی داده‌ها به صورت غیر همروند با استفاده از XMLHttpRequest. و جاوااسکریپت برای سرهم‌بندی همه چیز با هم.

در واقع ایجکس ترکیبی از تکنولوژی‌های فوق است و هیچ چیز جدیدی ارائه نمی‌دهد. همه شگفتی ایجکس در معماری هست که برای ساخت یک برنامه وب، با استفاده از این تکنولوژی‌ها ارائه می‌دهد.

ایجکس یک شیوه جهت طراحی و توسعه وب‌گاه‌ها بوده که جهت بالا بردن قدرت تعامل Interface سایت با کاربر و بالا بردن کیفیت عملکرد و قابلیت‌های سایت مورد استفاده قرار می‌گیرد. Ajax به صورت Client Side و با به کارگیری JavaScript و CSS مورد استفاده قرار می‌گیرد. امروزه در مبحث طراحی صفحات HTML تکنولوژی Ajax عامل حیات صفحه و ارضاء کاربر در مواجهه با واسط (Interface) تلقی می‌شود [۳].

ایجکس؛ معماری جدیدی برای وب
---------------------------

همان‌طور که اشاره شد، روش کار برنامه‌های کلاسیک وب چیزی شبیه این است: اکثر تعاملات کاربر با رابط کاربری باعث ارسال یک درخواست به سرور می‌شود. سرور پردازش‌های لازم را انجام داده و سپس یک صفحه HTML به کلاینت بازمی‌گرداند. این مدل بر اساس هدف اصلی وب، یعنی ایفای نقش یک رسانه برای ابرمتن است. اما آنچه وب را برای ابرمتن‌ها مناسب می‌کند، الزاماً آن را برای برنامه‌های نرم‌افزاری نیز مناسب نخواهد کرد. پیش از این به معایب روش کلاسیک و متداول اشاره کردیم. اکنون ببینیم Ajax چه پیشنهادی ارائه می‌دهد.
قسمت‌های مهم معماری پیشنهادی ای‌جکس به این قرارند: **رخدادهای کوچک سمت سرور**: اجزای درون یک برنامه وب می‌توانند، درخواست‌های کوچکی برای سرور ارسال کنند، اطلاعات مورد نیازشان را از سرور دریافت کنند، و هر قسمت از صفحه را که لازم است بر اساس DOM به‌روز کنند، بدون اینکه تمام صفحه دوباره بارگذاری و ترسیم شود.

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

**عکس‌العمل برای هر رخدادی**: تقریباً می‌توانیم برای تمام رخدادهایی که کاربر به وجود می‌آورد، با سرور ارتباط برقرار کنیم. مرورگرهای مدرن اکثر رخدادهایی را که سیستم‌عامل اجازه می‌دهد دریافت می‌کنند: کلیک کردن موس، حرکت موس روی شیء، زدن یک کلید و غیره. هر رخدادی می‌تواند باعث ارسال یک درخواست به صورت غیر همروند برای سرور شود.

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

آن دسته از فعالیت‌های کاربر که باعث یک درخواست HTTP می‌شدند، اکنون با استفاده از جاوا اسکریپت موتور ایجکس را فراخوانی می‌کنند. در مورد پاسخ به آن دسته از فعالیت‌های کاربر که نیاز به ارسال درخواست به سرور ندارند (مانند اعتبار سنجی‌های ساده داده‌ها، ویرایش داده‌های درون حافظه سیستم کلاینت، و حتی هدایت کاربر به بخش‌های مختلف برنامه در برخی موارد) موتور ایجکس خود وارد عمل می‌شود. اگر موتور ایجکس برای پاسخ گویی نیاز به چیزی از سمت سرور داشته باشد، (مثلاً اطلاعاتی را از بانک اطلاعاتی بخواهد، کدهای جدیدی برای رابط کاربر لازم داشته باشد و…) به صورت غیر همروند و معمولاً در قالب XML یک درخواست به سرور ارسال می‌کند.
ارسال این درخواست هیچ وقفه‌ای در کار کاربر با برنامه ایجاد نخواهد کرد [۲]. همان‌طور که پیش از این گفته شد، ایجکس مجموعه‌ای از چند تکنولوژی است. موتور Ajax از این تکنولوژی‌ها برای انجام وظایف مختلفی که بعهده دارد استفاده می‌کند.

پیشنهادهای ارائه شده با ایجکس
-----------------------------

* قسمت‌های مهم معماری پیشنهادی ای‌جکس به این قرارند:
	+ *رخدادهای کوچک سمت سرور*: اجزای درون یک برنامه وب می‌توانند، درخواست‌های کوچکی برای سرور ارسال کنند، اطلاعات مورد نیازشان را از سرور دریافت کنند، و هر قسمت از صفحه را که لازم است بر اساس DOM به‌روز کنند، بدون اینکه تمام صفحه دوباره بارگذاری و ترسیم شود.
	+ *غیر همروند بودن*: درخواست‌هایی که به سرور ارسال می‌شود، باعث مسدود شدن صفحهٔ درون مرورگر کلاینت نمی‌شوند. کاربر می‌تواند به کار با قسمت‌های دیگر برنامه ادامه دهد و هنگامی که پاسخی از سرور دریافت شد، با به‌روز کردن رابط کاربر، به کاربر اطلاع داده می‌شود.
	+ *عکس‌العمل برای هر رخدادی*: تقریباً می‌توانیم برای تمام رخدادهایی که کاربر به وجود می‌آورد، با سرور ارتباط برقرار کنیم. مرورگرهای مدرن اکثر رخدادهایی را که سیستم‌عامل اجازه می‌دهد دریافت می‌کنند: کلیک کردن موس، حرکت موس روی شی، زدن یک کلید و غیره. هر رخدادی می‌تواند باعث ارسال یک درخواست به صورت غیر همروند برای سرور شود. ۱

مشکلات ایجکس
------------

اگرچه این روش مزایای بسیاری دارد و شکاف بین برنامه‌های رومیزی و برنامه‌های وب را بسیار کم‌تر کرده‌است، اما مشکلاتی نیز دارد که هنگام کار به این روش، باید به آن‌ها توجه کرد.
یکی از مشکلاتی که در مورد ای‌جکس عنوان می‌شود، این مورد است که این روش کاربرد کلید Back مرورگرها را مختل کرده و این بر خلاف عادت کابران در محیط وب است. البته برای حل این مورد راه‌حل‌هایی پیشنهاد شده که این مقاله جای بحث در مورد آن‌ها نیست.
مشکل دیگر ایجکس مورد تأخیر شبکه و نگرانی در مورد زمان پاسخگویی سیستم است. مورد تأخیر شبکه در یک برنامه بر اساس Ajax باید با دقت در نظر گرفته شود. تأخیر در بارگذاری اولیه رابط کاربر برنامه، چیزیست که معمولاً برای کاربر قابل درک نیست و باید با دادن پیغامی مناسب، کاربر را از اینکه سیستم در حال بارگذاری، یا انجام فعالیتی و برقراری ارتباطی با سرور است، آگاه کرد.
مورد دیگری که در مورد سیستم‌های بر اساس Ajax وجود دارد، استفاده ایجکس از جاوا اسکریپت است و این مورد که کاربر می‌تواند اجازه اجرای جاوا اسکریپت در مرورگر خود را ندهد. پس باید پیش از شروع بارگذاری موتور ایجکس از اجازه داشتن اجرای جاوا اسکریپت روی مرورگر کلاینت اطمینان پیدا کرد. البته در مورد IE نسخه ۶، به این مورد نیز باید توجه کرد که شی XMLHttpRequest به صورت ActiveX پیاده‌سازی شده و در نتیجه کاربر باید امکان استفاده از ActiveXها را نیز به مرورگر بدهد.
مورد دیگری که باید به آن توجه داشت، این است که کدهای جاوا اسکریپت برنامه را هر کسی به راحتی می‌تواند ببیند. در نتیجه بهتر است قسمت‌هایی از برنامه را که مربوط به امنیت، یا منطق پردازشی برنامه می‌شود، سمت سرور نگه داریم.
به نظر می‌رسد ساخت سیستمی که ترکیب متوازنی از پردازش‌های سمت سرور و یک موتور ایجکس قوی در طرف کلاینت باشد، می‌تواند راه‌حل بسیار مناسبی باشد.

منابع
-----

1. ↑  AJAX؛ آیندهٔ وب، حمید صابری
2. ↑  Justin Gehtland and Ben Galbraith and Dion Almaer
"Pragmatic Ajax (A Web 2.0 Primer)" , Pragmatic Programmers, October 2005
3. ↑  Jesse James Garrett "Ajax: A New Approach to Web Applications" , اینجا بایگانی‌شده در ۷ نوامبر ۲۰۰۶ توسط Wayback Machine, February. 2005

پیوند به بیرون
--------------

|  |  |
| --- | --- |
|  | در ویکی‌انبار پرونده‌هایی دربارهٔ ایجکس (برنامه‌نویسی) موجود است. |

* دستاورد جدید برنامه‌های وب
* ایجکس (برنامه‌نویسی) در کرلی
* آموزش ایجکس

| * ن
* ب
* و
جاوااسکریپت |
| --- |
| تحلیل کد | 
* ای‌اس‌لینت
* JSHint
* جی‌اس‌لینت

 |
| مترجم | 
* کافی‌اسکریپت
* بسته ابزارهای گوگل
* ابزار وب گوگل
* Morfik
* تایپ‌اسکریپت

 |
| مفاهیم | 
* ای‌جکس
* جاوااسکریپت
* اچ‌تی‌ام‌ال پویا
* کتابخانه جاوا اسکریپت
* قواعد جاوااسکریپت
* جاوااسکریپت محجوب

 |
| اشکال‌یاب‌ها | 
* فایرباگ
* Microsoft Script Debugger
* Microsoft Script Editor
* مایکروسافت ویژوال استودیو
* Opera Dragonfly
* Microsoft Visual Web Developer Express
* Venkman
* سافاری (مرورگر)

 |
| مولد مستندسازی | 
* جی‌اس‌داک

 |
| ویرایشگرها | 
* جاوااسکریپت
* Comparison of JavaScript-based source code editors

 |
| موتورها | 
* Comparison of layout engines
* List of ECMAScript engines
* List of JavaScript engines

 |
| چارچوب نرم‌افزار | 
* Comparison of JavaScript frameworks
* List of JavaScript libraries

 |
| زبان‌های مرتبط | 
* اکشن‌اسکریپت
* asm.js
* کافی‌اسکریپت
* دارت
* اکما اسکریپت
* JavaScript OSA
* جی‌اسکریپت
* تایپ‌اسکریپت
* وی‌بی‌اسکریپت

 |
| فناوری مرتبط | 
* شیوه‌نامه آبشاری
* مدل شی‌گرای سند
* اچ‌تی‌ام‌ال
* جی‌سن

 |
| منابع | 
* ان‌پی‌ام
* نوگت

 |
| جاوااسکریپت | 
* صفحه‌های سرور فعال
* CommonJS
* JSGI
* نود.جی‌اس
* Wakanda

 |
| آزمایش واحد | 
* جزمین
* QUnit
* List of JavaScript unit testing frameworks

 |
| افراد | 
* داگلاس کراکفرد
* برندان ایچ
* جان رزایگ

 |

| داده‌های کتابخانه‌ای ویرایش در ویکی‌داده |
| --- |
| کتابخانه‌های ملی | 
* اسپانیا
* فرانسه (داده‌ها)
* آلمان
* اسرائیل
* ایالات متحده آمریکا

 |
| سایر | 
* کاربرد چندوجهی اصطلاحات موضوعی
* سوداک (فرانسه)
	+ 1

 |

| * ن
* ب
* و
رابط‌های وب |
| --- |
| سمت سرور | 

|  |  |
| --- | --- |
| پروتکلها | 
* HTTP
* CGI
* SCGI
* FCGI
* AJP
* WSRP
* وب‌سوکت

 |
| رابط برنامه‌نویسی وب | 
* C NSAPI
* C ASAPI
* C ISAPI
* COM ASP
* جاوا سرولت
	+ container
* CLI OWIN
* ASP.NET Handler
* Python WSGI
* Ruby Rack
* JavaScript JSGI
* Perl PSGI
* Lua WSAPI
* Portlet

 |
| Apache modules | 
* mod\_jk
* mod\_lisp
* mod\_mono
* mod\_parrot
* mod\_perl
* mod\_php
* mod\_proxy
* mod\_python
* mod\_wsgi
* mod\_ruby
* Phusion Passenger

 |
| موضوعات | 
* منبع وب در برابر خدمات وب
* Open API
* Webhook
* سرور کاربردی
	+ comparison
* اسکریپت‌نویسی

 |

 |
| سمت کاربر | 

|  |  |
| --- | --- |
| رابط‌های مرورگر | 
* C NPAPI
	+ LiveConnect
	+ XPConnect
* C NPRuntime
* C PPAPI
	+ NaCl
* اکتیوایکس
* BHO
* XBAP

 |
| رابطه برنامه‌نویسی وب | 

|  |  |
| --- | --- |
| W3C | 
* Audio
* کانواس
* CORS
* DOM
* DOM events
* EME
* File
* Geolocation
* IndexedDB
* MSE
* SSE
* SVG
* Video
* وب‌آرتی‌سی
* وب‌سوکت
* Web Messaging
* Web storage
* Web worker
* XMLHttpRequest
* وب‌اسمبلی

 |
| Khronos | 
* WebCL
* وب‌جی‌ال

 |
| دیگر | 
* Gears
* Web SQL Database (پیشتر با نام W3C)
* WebUSB

 |

 |
| موضوعات | 
* ایجکس در برابر اچ‌تی‌ام‌ال پویا
* Mashup
* Web IDL
* اسکریپت‌نویسی

 |

 |
| شرکتهای خدمات وب | 
* بهسازان هاست

 |
| موضوعات | 
* صفحه وب پویا
* Open Web Platform
* برنامه‌های غنی اینترنتی
* برنامه کاربردی وب

 |