Parsi Coders

نسخه‌ی کامل: زبان برنامه نویسی آژاکس
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
اِیْ‌جکس یا آژاکس (AJAX؛ سرواژهٔ «Asynchronous JavaScript And XML»)، مجموعه‌ای از استانداردها و فناوری‌های وب است که به کمک آن‌ها می‌توان برنامه‌هایی مبتنی بر وب تولید کرد که به آسانی با کاربران تعامل داشته باشند. با استفاده از این فناوری‌ها و با کمک انتقال تکه‌های کوچک داده و اطلاعات از رایانهٔ خادم (Server)، صفحات وب از حالت منفعل خارج می‌شوند و واکنش‌هایی مناسب با رویدادها انجام می‌دهند.

Ajax معماري جديدي براي برنامه‌هاي تحت وب است، که با سرعت بسيار زيادي در حال گسترش بوده، و کمتر کاربر اينترنت است که هنوز گذرش به يکي از صفحاتي که با اين معماري ساخته شده‌اند نيفتاده ، و از قابليت‌هاي فوق‌العاده آن ذوق‌زده نشده باشد. Gmail، Google Map،Google Suggest ، Orkut، و اسامي آشناي ديگر، نمونه هايي هستند از جادويي به نام AJAX . با استفاده از اين معماري، صفحات وب تعامل بسيار خوبي با کاربران خواهند داشت و بعلاوه، مهمترين مزيت اين معماري اين است که ديگر براي انجام هر کاري، لازم نيست صفحه وب دوباره بارگذاري شود.در اين مقاله به بررسي تاريخچه، اصول و شيوه انجام کارها در اين معماري خواهيم پرداخت.

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

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

پیشینه

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

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

مایکروسافت در نسخهٔ ۵ اینترنت اکسپلورر شیء XMLHttpRequest را ارائه کرده و برای اولین بار در Outlook Web Access که در Microsoft Exchange Server 2000 ارائه شد، از این روش با استفاده از شی XMLHttpRequest بهره جست.

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

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

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

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

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

اي‌جكس يک تکنولوژي نيست؛ بلکه مجموعه‌ايست از تکنولوژي‌هايي که هر يک در جاي خود تکنولوژي کامل و موفقي هستند، و اکنون به شکل جديدي در کنار هم قرار گرفته و Ajax را تشکيل داده‌اند.تکنولوژي‌هايي که در Ajax از آن‌ها استفاده مي‌شود عبارتند از:

* نمايش استاندارد با استفاده از XHTML و CSS.

* نمايش پويايي و تعاملات با استفاده از Document Object Model (DOM).

* تبادل و دستکاري داده با استفاده از XML و XSLT.

* بازيابي داده‌ها بصورت غير همروند با استفاده از XMLHttpRequest.و JavaScript براي سرهمبندي همه چيز با هم.

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

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

رخدادهاي کوچک سمت سرور: اجزاي درون يک برنامه وب مي‌توانند، درخواست‌هاي کوچکي براي سرور ارسال کنند، اطلاعات مورد نيازشان را از سرور دريافت کنند، و هر قسمت از صفحه را که لازم است بر اساس DOM به‌روز کنند، بدون اينکه تمام صفحه دوباره بارگذاري و ترسيم شود.

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

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

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

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

اکنون ببینیم Ajax چه پیشنهادی ارائه می‌دهد.

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

مشکلات Ajax

اگرچه اين روش مزاياي بسياري دارد و شکاف بين برنامه‌هاي روميزي و برنامه‌هاي وب را بسيار کم‌تر کرده است، اما مشکلاتي نيز دارد که هنگام کار به اين روش، بايد به آن‌ها توجه کرد. يکي از مشکلاتي که در مورد Ajax عنوان مي‌شود، اين مسئله است که اين روش کاربرد کليد Back مرورگرها را مختل کرده و اين بر خلاف عادت کابران در محيط وب است . البته براي حل اين مسئله راه‌حل‌هايي پيشنهاد شده که اين مقاله جاي بحث در مورد آن‌ها نيست. مشکل ديگر Ajax مسئله تاخير شبکه ونگراني در مورد زمان پاسخگويي سيستم است. مسئله تاخير شبکه در يک برنامه بر اساس Ajax بايد با دقت در نظر گرفته شود. تاخير در بارگذاري اوليه رابط کاربر برنامه، چيزيست که معمولا براي کاربر قابل درک نيست و بايد با دادن پيغامي مناسب، کاربر را از اينکه سيستم درحال بارگذاري، يا انجام فعاليتي و برقراري ارتباطي با سرور است، آگاه کرد . مسئله ديگري که در مورد سيستم‌هاي بر اساس Ajax وجود دارد، استفاده Ajax از JavaScrip است و اين مسئله که کاربر مي‌تواند اجازه اجراي JavaScript در مرورگر خود را ندهد. پس بايد پيش از شروع بارگذاري موتور Ajax از اجازه داشتن اجراي JavaScript روي مرورگر کلاينت اطمينان پيدا کرد. البته در مورد IE نسخه 6، به اين مسئله نيز بايد توجه کرد که شی XMLHttpRequest به صورت ActivX پياده سازي شده و در نتيجه کاربر بايد امکان استفاده از ActivX ها را نيز به مرورگر بدهد . مسئله ديگري که بايد به آن توجه داشت، اين است که کدهاي JavaScript برنامه را هر کسي به راحتي مي‌تواند ببيند. در نتيجه بهتر است قسمت‌هايي از برنامه را که مربوط به امنيت، يا منطق پردازشي برنامه مي‌شود، سمت سرور نگه داريم. به نظر مي‌رسد ساخت سيستمي که ترکيب متوازني از پردازش‌هاي سمت سرور و يک موتور Ajax قوي در طرف کلاينت باشد، مي‌تواند راه‌حل بسيار مناسبي باشد.