تبليغاتX
وبلاگ برنامه نویسان اهواز
آموزش برنامه نویسی به زبان های برنامه نویسی دلفی و ویژوال بیسیک و ...
 یکم دیگه درباره AJax
آژاکس (آجاکس AJAX) سرنام عبارت Asynchronous JavaScript and XML یا XML و جاوا اسکریپت (Java Script) غیر همزمان می‌باشد. که سرو کله آن در دنیای وب و اینترنت حدود یک سال است که پیدا شده. این اندیشه که جاوا اسکریپت را همراه یا بدون XML بکار برد تا قابلیت هایی همچون هوشمندی و تعاملی (Interactive) بودن با به صفحه وب افزود به روزهای نخست تولد وب (WEB) باز می‌گردد. اما اکنون آژاکس یا معادل مایکروسافتی آن Atlas ، بهترین شیوه برای آن است تا برنامه های تحت وب سمت کاربر(Client side) را با کمترین دردسر تولید کنیم.
اگر شما هم به این همه امکانات چه از نوع اوپن سورس آن و چه بسته های تجاری آماده ، علاقه مند هستید در پاسخ باید بگوییم که در بعضی موارد و نه همیشه این بسته های اوپن سورس پاسخگوی شما خواهند بود.
برخی از شناخته شده ترین و خوشنام ترین بسته های نرم افزاری آجاکس همچون : Backbase, JackBe, General Interface و Tibco's امکانات عالی برنامه نویسی را در کنار محیط توسعه پیشرفته در اختیار شما می نهند. ماژول های خبره برای رویدادها و دیباگر های (debug) حرفه ای نیز، بخشی از این امکانات هستند که با کمک آنها شما می‌توانید برنامه های کاملی را برای اجرا در محیط محدود و بسته مرور گر اینترنت خلق کنید.
برنامه هایی در حد و اندازه نرم افزارهای کامپایل شده تحت ویندوز (Native code) .

حالا خودم . :

مقدمه .

بر خلاف افکار  که باشنیدن کلمه آجاکس فکر می کنیم به یه زبان برنامه نویسی جدید داریم قدم میزاریم این رو باید بگم که آجاکس اصلا یک زبان برنامه نویسی نیست . !!!
آجاکس یک ساختار برای دست رسی به دیگر صفحات ( یک وبسایت یا وبسایتهای دیگر  )و برای تزریق درون صفحات و اطلاعات به حساب میاد . ساختاری شبیه به ساختار GETVARABLES در FLASH فایل ها ... . اما با امکاناتی بیشتر.

واضح تر بگم . همین سایت کلوپ خودمون بر همین مبنا استواره . سایت کلوپ برای به دست آوردن اطلاعات صفحات خودش ( مثلا اطلاعات لیست دوستان شما . بحث ها . لیست تایپیک ها و .. ) از این صفحه که هسته مرکزی سایت هم به حساب میاد استفاده می کنه  :
http://www.cloob.com/srec_i.php
این صفحه که در بازدید اولیه شما یک صفحه خالی به نظر میرسه ، شاید بشه گفت هسته درونی سایت به حساب میاد . که با استفاده از همین سیستم آجاکس به ارسال و دریافت اطلاعات از سرویس دهنده مشغوله .

همونطور که در بالا هم اشاره شده بود . آجاکس یک سیستم میتنی بر XML و JAVASCRIPT هستش . اما من اینو نقض می کنم . چون دست رسی به سیستم درسافت اطلاعات در هر زبان برنامه نویسی دیگه می تونه اتفاق بیفته . مثلا VBS و C# و .. . پس نگران بلد بدون یا نبودن JAVASCRIPT نباشید .

من از اینجا به به بعد کلمه آجاکس رو بی خیال میشم . چون نمی خوام به توضیح آجاکس بپردازم . بلکه به توضیح نوع ساختار مشغول میشم و گریزی به AJAX هم می زنیم .

اصل مطلب  :

چگونگی ارسال و دریافت اطلاعات از صفحات دیگر بدون SUBMIT :

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

آشنایی با ابزار های XML HTTP Request :

این ابزار که ارئه شده توسط شرکت میکروسافت ( MicroSoft ماکروسافت ) است ابزاریست برای دست رسی درون صفحه ای ((چه به صورت کلاینت ساید چه به صورت سرور ساید  (Client | Server Side ) )) به اطلاعات سرویس دهنده می باشد .

شما برای دست رسی به این ابزار که درون فایل MSXML*.DLL  جادارد ( منظور از ستاره عدد ورژن است مثلا MSXML3.DLL) . در صفحات وب بسته به کلایت ساید بودن یا نبودن ( یعنی اجرای سمت سرویس گیرنده ) . از روشهای مختلفی می توانید استفاده کنید که من به نمونه از این روش که دو سویه می باشد اشاره می کنم .
شما می توانید با استفاده از جاوا اسکریپت  به صورت زیر به ایجاد یک شیع XML HTTP Reques بپردازید . : ( دقت کنید که جاوا اسکریپ برای کلمات با حروف کوچک و بزرگ تفاوت قائل است )

var receiveReq
 if(window.ActiveXObject)
   receiveReq=new ActiveXObject("Microsoft.XMLHTTP");
else
   receiveReq=new XMLHttpRequest();

پس از خلق شیع می باست با استفاده از خصلت ها و پارمترهای درونی به شیع مورد نظر بفهمانیم که صفحه مورد نظر مارا از آدرس مورد نظر و به چه شکل فرا خوانی یا ارسال اطلاعات کنید . 

پارامتر OPEN :
اطلاعات بیشتر : http://msdn2.microsoft.com/en-us/library/ms757849.aspx

oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);

همینطور که در بالا می بینید پروسیجر Open دارای 5 متغییر ورودیست که به شرح مختصری راجب هرکدام می پردازیم .

bstrMethod :

پارامتر متد برای انتخاب نوع برقراری ارتباط می باشد . به عبارتی نوع ارسال فرم در روش کلاسیک HTML رو تعیین می کنه که شامل یکی از دو عبارت رشته ای POST یا GET میشه

bstrUrl :

آدرس یا همون Url صفحه مورد نظر . در صورتی که از متد GET استفاده می کنید می بایست پارامترهای ورودی را نیز به url اضافه کنید .

varAsync :

این پارامتر که یک پارامتر بولین ( TRUE | FALSE ) می باشد . تعیین کنند همزمانی ارسال یا غیر همزمانیست .
به عبارت ساده تر تعیین می کند که بعد از تکمیل ارتباط آیا پروسیجر روخداد (event)  کنترلر ارسال یا onreadystatechange فراخوانی گردد یا خیر .

bstrUser , bstrPassword

تعیین کننده شناسه و کلمه عبور کاربری برای صفحات لیمیت شده می باشد . که معمولا خالیست . و استفاده نمی شود  .

در زیر یک نمونه از اسفاده را برایتان می نویسم .

باز کردن با متد GET

 urlvar=url+'?'+paramsafe;
receiveReq.open ("GET",urlvar,true);

باز کردن با متد پوست

receiveReq.open ("POST",url,true);

پس از ایجاد ارتباط ما قصد داریم تا نوع  ارسال و باز گشت را تعیین کنیم . دو روش را در پیش رو داریم .

  • روش هم زمانی . ( که کمتر کاربرد دارد ) .
  • روش غیر همزمانی . که با استفاده از varAsync  در هنگام باز کردن و ارسال نتیجه به روخداد onreadystatechange استفاده می شود .

حقیقت خودمم به همزامانی مسلط نیستم . پس ازش می گزرم . می توند با مراجعه به سایت MSDN اطلاعات بیشتری در باره هم زمانی به دست بیارید .

روش غیر هم زمانی : در این روش ما می بایست به تعریف یک تابع برای به دست آوردن نتیجه بپردازیم . به مثال زیر دقت کنید .

function doHttpReadyStateChange() {
   if (receiveReq.readyState == 4) {
      Resultlyer.innerText = 'State Complete ';
      Result.innerText = receiveReq.responseText ;
   }
}
....
receiveReq.onreadystatechange =
doHttpReadyStateChange

همانطور که در  مثال بالا هم مشاهده می کنید readyState مشخص کننده وضعیت جاری شیع مورد نظر است . که در وضعیت شماره 4 نتیجه ارسال تکمیل شده است .
شما در receiveReq.responseText می توانید به نتیجه به دست آمده به صورت متنی دست رسی پیدا کنید . ( یعنی شمال نتایج به صورت کلی . چه HTML چه XML یا متن )

* نکته :
دقت کنید که ما تا اینجا به ارسال اطلاعات نپرداختیم بلکه به تنظیمات قبل از ارسال برای دریافت اطلاعات اشاره کردیم .

تنظیمات Header در متد POST :

برای استفاده از متد پوست یا ارسال اطلاعات می بایست هدر ( سر متن ) ارتباط را تعیین کنید ( متاسفانه من هم چندادن به این سر متن ها مسلت نیستم ولی کی دو نمونه که دیدم براتون میازرم ) . این کار توست پروسیجر setRequestHeader . انجام می گیرد .
مثال :

 receiveReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

دستور SEND :

حال می باست دستور ارسال و دریافت را صادر کنیم . این دستور به وسیله پروسیجر SEND ارسال می گردد . با فراخوانی این روال ارتباط برقرار شده و می بایست منتظر نتیجه ماند . اگر از متد POST استفاده می کنید می بایست پارامتر ها را در هنگام ارسال به شیع ایجاد شده اضافه کنیم . به مثال زیر دقت کنید :

paramsafe = 'NewsID=1&order=1&date='+now();
receiveReq.send(paramsafe)

کار تمام شد .

اطلاعات بیشتر رو از اینجاهم می تونید به دست بیارید . راهنمای ONLINE MSDN :
http://msdn2.microsoft.com/en-us/library/ms763742.aspx

حالا با استعداد خودتون به تغییر نوع ارتباط بپردازید . در زیر هم یک نمونه برنامه از همین نوع ارتباط میزارم .











|+| نوشته شده توسط محمد جاهد در دوشنبه 22 آبان1385  |
 درباره AJax (ای جکس)
اي‌جكس چيست؟
اين واژه را اولين بار جسي جيمز گرت (Jesse James Garrett)، برنامه‌نويسي از شركت Adaptive Path در مقاله‌اي با عنوان <اي‌جكس: رهيافت جديدي در برنامه‌هاي تحت وب> به‌كار برد. اي‌جكس سرنام عبارت Asynchronous JavaScript and XML و به معني تركيب نامتقارن جاوا اسكپريپت و ‌XML است.

چرا نامتقارن؟ چون تركيب اين دو فناوري به شما كمك مي‌كند قسمتي از يك صفحه وب را بروز كنيد بدون اينكه لازم باشد <همزمان يا متقارن> با اين عمل، كل آن صفحه از نو بارگذاري شود. اين عمليات توسط شيء و فرماني به نام XMLHttpRequest انجام مي‌شود كه سال‌ها پيش، هنگام معرفي نسخه 4 مرورگر اينترنت اكسپلورر وارد اين نرم‌افزار شده و به دليل قابليت‌هاي جالبي كه دارد، اين روزها تمام مرورگرهاي معروف و قدرتمند وب مانند فايرفاكس و اپرا از آن پشتيباني مي‌كنند. به كمك اين شي‌ء مي‌توانيد برنامه‌هايي به زبان جاوا اسكريپت بنويسيد كه در پشت صحنه يك صفحه وب اطلاعاتي را به سرور بفرستند و داده‌هايي را دريافت كنند.

اي‌جكس اساسا رهاوردي از دنياي جاوا است و  بار ديگر فناوري جاوا و زبان اسكريپت‌نويسي وابسته به آن را در كانون توجه برنامه‌نويسان قرار داده است. اما خبر خوب اينست كه چون همه پلتفرم‌هاي برنامه‌نويسي وب از قبيلPHP ،ASP.NET و JSP از جاوا اسكريپت و ‌XML پشتيباني مي‌كنند، فناوري اي‌جكس در همه اين پلاتفرم‌ها پياده‌سازي شده و حتي جالب است بدانيد كه تعداد ماژول‌هاي اي‌جكس نوشته شده براي دات نت و ‌PHP بيشتر از انواع جاوايي آن است.

مايكروسافت كه سال‌ها پيش از شيء XMLHttpRequest در نرم‌افزار Outlook Web Access استفاده كرد و جزو اولين ترويج‌دهندگان اين تكنيك به شمار مي‌رود اخيرا نرم‌افزاري به نام Atlas معرفي كرده كه مخصوص برنامه‌نويسي مبتني بر اي‌جكس است. اما چون اي‌جكس بر اساس جاوا كار مي‌كند بديهي است كه جنبش اپن سورس و خيل عظيم برنامه‌نويسان جاوا نيز بيكار نمانده‌ و مي‌كوشند تا دير نشده Ajax را به قلب دنياي نرم‌افزارهاي آزاد بياورند و از انحصاري شدن آن جلوگيري كنند تا اين فناوري به استاندارد جديد وب تبديل شود. به نظر مي‌رسد كه آنها موفق بوده‌اند زيرا حتي پياده‌سازي‌هاي دات نتي اي‌جكس نيز اغلب به صورت اپن سورس است.

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

به طور سنتي وقتي كاربر فرمي را پرمي‌كند و به سايت ارسال مي‌كند، وب سرور با بارگذاري مجدد يا تازه‌سازي صفحه (refresh) و نمايش يك پيغام و يا نتيجه پردازش اطلاعات، به او پاسخ مي‌دهد و به همين دليل هم وقت سرور براي ارسال كل محتواي آن صفحه گرفته مي‌شود و هم كاربر بايد براي دريافت كامل آن صفحه منتظر بماند؛ كه نتيجه آن كاهش بازده سرور، مصرف پهناي باند و تلف شدن وقت و هزينه است. اما به‌كارگيري تكنيك اي‌جكس اين مشكلات را به طرز قابل‌ملاحظه‌اي كاهش مي‌دهد.

  گوگل باز هم پيشتار
 
 
همانطور كه جسي جيمز گرت مي‌نويسد، گوگل در ميان سايت‌هاي اينترنتي از نظر ميزان به‌كارگيري فناوري اي‌جكس پيشتاز است و اين تكنيك را در نرم‌افزار سايت‌هاي Orkut ،Gmail ،Google Groups، سيستم Google Suggest و سرويس Google Maps به كار برده است. همچنين به گفته گرت بسياري از قابليت‌هاي دوست داشتني Flickr، سايت به اشتراك‌گذاري عكس ياهو، و نيز موتور جستجوي A9 در سايت آمازون بر اساس اي‌جكس كار مي‌كنند.
 

گرت مي‌نويسد: اگر موتور اي‌جكس براي پاسخ دادن به كاربر نيازمند گرفتن اطلاعاتي از سمت سرور است، اگر قرار است داده‌ها براي پردازش به سرور ارسال شوند، اگر لازم است كدهاي اضافي براي نمايش تغييرات اينترفيس بارگذاري شوند، اگر نياز به بازيابي و بيرون كشيدن اطلاعات از بانك اطلاعاتي باشد، همه اين كارها به‌طور آسنكرون و با استفاده از XML، بدون اينكه وقفه‌اي در تماس ميان كاربر و اينترفيس نرم‌افزار به‌وجود آيد توسط موتور اي‌جكس انجام خواهد شد.

 
شكل 1
 
 
شكل 2
 
شكل‌هاي 1 و 2 تصاويري هستند كه گرت در مقاله خود استفاده كرده است. شكل 1 مقايسه‌اي است كه نشان مي‌دهد كه برنامه‌هاي تحت وب سنتي چگونه كنش‌هاي كاربر را مديريت مي‌كنند و اي‌جكس چگونه همين عمليات را كنترل مي‌كند.
 
شكل 2 مقايسه ديگري است كه نشان مي‌دهد اگر تعامل كاربر با يك سايت را در محور زمان ترسيم كنيم، چه تفاوتي ميان فرآيند ارسال و دريافت داده‌ها در نرم‌افزارهاي سنتي و نرم‌افزارهاي مبتني بر فناوري اي‌جكس وجود دارد.

اگر به نمودار شكل 2 دقت كنيد متوجه مي‌شويد كه هنگامي كه اينترفيس يك برنامه وب از اي‌جكس استفاده مي‌كند، تماس ميان كاربر و اينترفيس هرگز قطع نمي‌شود. او همواره نرم‌افزار را در دسترس و پيش روي خود مي‌بيند و موتور اي‌جكس در پشت صحنه عمليات ارسال و دريافت داده‌ها را مديريت مي‌كند.


مزايا و معايب Ajax
طي سال‌هاي اخير صنعت نرم‌افزار در عرصه وب به سوي توليد سيستم‌هايي حركت كرده‌است كه هرچه بيشتر مستقل از نوع سيستم‌عامل و مرورگري باشد كه كاربر استفاده مي‌كند.
 
نگاهي به سير تحولات مربوط به زبان‌هاي برنامه‌نويسي وب مانند PHP و ASP از يك‌سو و كاهش اقبال برنامه‌نويسان به  فناوري‌هايي همچون ActiveX و Java Applet در سمت كلاينت از سوي ديگر، مويد اين نكته است.


در واقع يكي از دلايل مهم توجه دنياي نرم‌افزار به فناوري اي‌جكس همين است. اين دستاورد برخلاف فناوري‌هايي مانند Macromedia Flash نيازمند نصب هيچ نرم‌افزار الحاقي و اضافي روي مرورگر نيست و همين حالا بستر لازم براي پياده‌سازي اي‌جكس روي ميليون‌ها سايت و مرورگر وب وجود دارد. در اين ميان، اتكاي اي‌جكس بر فناوري XMLاز اهميت ويژه‌اي برخوردار است.
 

زيرا XML ماهيتا يك فناوري باز است كه انعطاف‌پذيري زيادي دارد و هم‌اكنون در مقياس گسترده‌اي در نرم‌افزارهاي تحت وب، از سيستم‌هاي تجارت‌الكترونيك گرفته تا نرم‌افزارهاي مديريت محتواي سايت‌هاي وب و فناوري‌هايي همچون وب‌سرويس، ‌RSS و حتي پادكستينگ مورد استفاده قرار مي‌گيرد.
 
ظهور اي‌جكس نشان مي‌دهد كه فناوري XML هنوز قابليت‌هاي كشف‌نشده‌‌اي دارد كه همچنان بكر مانده‌اند و مي‌توانند منشا تحولات بزرگ در سيستم‌هاي اطلاعاتي و ارتباطي باشند.


طعم كد Ajax چگونه است؟
 
ورود به مباحث كد‌نويسي اي‌جكس مقوله پيچيده و مفصلي است كه در اين مقاله نمي‌گنجد، ولي خالي از لطف نيست كه كمي با شكل و قيافه كدهاي اي‌جكس آشنا شويد. كد زير نمونه‌اي از اعلان شي ءXMLHttpRequest را نشان مي‌دهد:
 
كد1
 
كد 2 نمونه‌اي از اعلان شي‌ء ‌XMLHttpRequest را در مرورگرهاي مايكروسافتي نشان مي‌دهد:
كد 2
 
كد 3  نمونه‌اي از كد‌نويسي جاوا اسكريپت را نشان مي‌دهد. در اي‌جكس به وفور از متدولوژي DOM در جاوا اسكريپت و DHTML استفاده مي‌كنيم:
كد 3
 
كد 4 نيز نمونه‌‌اي از روش ارسال يك تقاضا به وسيله Ajax را نشان مي‌دهد:
كد 4
 
اين تقاضا مي‌تواند مثلا از قسمتي از يك صفحه وب به صورت كد 5 باشد:
كد 5
 
نهايتا پاسخ دريافت شده از سمت سرور را نيز مي‌توان به وسيله كدي شبيه به كد 6 مورد استفاده قرار داد:
كد 6
 


در همين ارتباط، رويكرد اي‌جكس به سمت فناوري  وب‌سرويس قابل توجه است. از آنجا كه ‌Ajax تا حد زيادي به معماري XMLHttpRequest وابسته است، اين قابليت را دارد كه فرامين ارسال و دريافت اطلاعات را نه فقط از طريق سايت اصلي نمايش‌ دهنده يك صفحه وب، بلكه از طريق سايت‌هاي ديگري كه احتمالا اطلاعات خود را بر بستر وب سرويس و ‌XML قرار داده‌اند نيز دريافت كند. بنابراين اي‌جكس بالقوه يك فناوري سازگار با وب سرويس نيز هستد.
مزيت مهم ديگر Ajax بهره‌گيري آن از استاندارد CSS است.
 
استانداردي كه به تنهايي منشا تحولات ديگري در زمينه اينترفيس نرم‌افزارهاي وب است و در آينده بسيار نزديك به  وجه غالب صفحه‌آرايي و اينترفيس سايت‌هاي وب تبديل خواهد شد. توجه اي‌جكس به CSS شان مي‌دهد كه اين فناوري همزمان با به‌كارگيري جاوا اسكريپت و ‌XML براي مديريت داده‌ها، از استاندارد پيشرفته‌اي براي اينترفيس وب استفاده مي‌كند و مي‌توان حقيقتا آن را يك فناوري مرتبط با اينترفيس ( و نه فقط تعامل ميان كلاينت و سرور) تلقي كرد.

با اين وجود، اي‌جكس معايبي نيز دارد و اين معايب موضوع بحث بسياري در محافل برنامه‌نويسي روي اينترنت است. يكي از مسائلي كه به عنوان ايراد  مطرح شده، دشواري تغيير عادت كاربران در استفاده از كليدهاي Back وForward و Refresh در مرورگرهاي وب است. يكي از مشكلات برنامه‌نويسان وب همواره اين است كه يا بايد كاربر را عادت دهند كه هرچه كمتر از اين دكمه‌ها استفاده كند و يا نرم‌افزار خود را طوري بنويسند كه اگر كاربر سهوا يا عمدا از اين دكمه‌ها استفاده كرد، نرم‌افزار دچار اشتباه و خطا در تفسير عمل كاربر نشود.
 
به عنوان مثال هنوز بسياري از سايت‌هاي تجارت الكترونيكي كه به كار فروش محصولات مشغولند هنگام طي شدن مراحل نهايي خريد آنلاين به كاربر هشدار مي‌دهند كه حين پردازش يك سفارش (يعني درست در لحظه‌اي كه فرمان نهايي از سوي كاربر ارسال شده است و هنوز صفحه نمايش پيغام ثبت موفقيت‌آميز سفارش يا عدم ثبت آن براي وي نمايش داده نشده) از فشردن كليد Refresh جدا پرهيز كنند وگرنه ممكن است از كارت اعتبار آنها دوبار پول كسر شود. همچنين استفاده از دكمه‌هاي Back و Forward در عملياتي كه به آساني برگشت‌پذير نيستند ممكن است باعث گيج شدن كاربر است.
 
مثلا اگر نامه‌هاي داخل صندوق پستي خود را پاك كنيد، استفاده از دكمه Back هرگز اين عمل را Undo نمي‌كند. همچنين اگر يك قلم كالا به سبد خريد آنلاين خود اضافه كنيد، فشردن دكمه‌Back  ممكن است در ظاهر چنين نشان دهد كه آن قلم كالا مجددا از سبد برداشته شده اما در سمت سرور همچنان در سبد خريد كاربر باشد. از آنجا كه فناوري اي‌جكس عمل ‌Navigation يا راهبري در يك سايت را به روندي غير‌خطي تبديل مي‌كند، تمام اين مشكلات به شكل حادتري ممكن است بروز كند.

در واقع با حضور Ajax، كاركرد سيستم History مرورگر به مساله‌اي بغرنج تبديل مي‌شود. زيرا برنامه‌نويس يا بايد با گنجاندن دكمه‌ها و فرامين اضافي، مكانيزم ‌Undo را بازسازي كند و يا موتور اي‌جكس را طوري بنويسد كه فشردن دكمه ‌Back خود به خود موجب احظار فرمان Undo شود.

در هر دو صورت كار برنامه‌نويس آسان نخواهد بود. البته در اين زمينه ترفندها و تكنيك‌هايي هم ابداع شده است. از جمله، استفاده از تگ ‌IFRAME مخفي در اينترفيس صفحه كه موتور اي‌جكس بتواند در صورت فشرده شدن دكمهBack از سوي كاربر، نسخه‌هاي پيشين نمايش داده شده از اينترفيس را از انباره ‌History مرورگر بيرون بكشد و دوباره در چرخه عمليات موتور اي‌جكس وارد كند. اين ترفند هم‌اكنون در سرويس Google Maps استفاده مي‌شود.
مشكل ديگري كه در رابطه با اي‌جكس وجود دارد، بي معني شدن مفهوم Bookmark است.
 
بازهم مكانيزم غيرخطي اي‌جكس مشكل ساز مي‌شود. آيا شما مي‌توانيد در نرم‌افزارهاي معمولي دسكتاپ يك لحظه مشخص را Bookmark كنيد و دوباره به آن برگرديد؟ بعضي از نرم‌افزارها مانند فتوشاپ
 (سيستم Action history) اين‌كار را انجام مي‌دهند، ولي اغلب نرم‌افزارها چنين نيستند. در واقع به سختي مي‌توان از لحظات مختلف يك نرم‌افزار عكس گرفت و snapshot تهيه كرد.

اين‌كار به يك انباره پيچيده نياز دارد كه هم حالت‌هاي مختلف اينترفيس و هم وضعيت‌هاي متفاوت داده‌ها را قبل و پس از تغييرات در خود نگه دارد. البته درمورد Ajax راهكارهايي در اين زمينه پيشنهاد شده است. از جمله استفاده از anchor در HTML كه پس از علا‌مت َ‌ در يك URL ‌ظاهر مي‌شود. از آنجايي كه جاوا اسكريپت امكان به روزرساني دايناميك آنكورها را دارد، بعضي برنامه‌نويسان پيشنهاد كرده‌اند كه از اين ترفند براي نگهداري حالات مختلف يك برنامه مبتني بر اي‌جكس استفاده شود. تكنيكي كه ممكن است در زمينه حل مشكل دكمه‌هاي Back و Forward   نيز سودمند واقع شود.

يك مشكل عمده ديگر نيز در ارتباط با اي‌جكس وجود دارد. اين فناوري به شدت متكي به ‌XMLHttpRequest است و اين شيء به دلايل امنيتي طي ماه‌هاي اخير هرچه بيشتر و بيشتر در نسخه‌هاي جديد مرورگرها محدود شده است. زيرا اگر هر كلاينتي بتواند از هر نقطه‌اي به هر سروري اين فرمان را بفرستد، آنگاه تهديد‌هاي امنيتي عليه سايت‌ها افزايش مي‌يابد. محدوديت‌هاي جديد اعمال‌شده در نسخه‌هاي اخير مرورگرها موجب شده كه فرمانXMLHttpRequest به‌غير از سايتي كه صفحه وب از آنجا آمده است نتواند با سايت ديگري ديالوگ داشته باشد و اين مسئله در تناقض با كاربرد اي‌جكس در زمينه  وب‌سرويس است.
 
البته براي غلبه بر اين مشكل راه‌حل‌هايي هم پيشنهاد شده است، از جمله اين‌كه شي ‌ءXMLHttpRequest مي‌تواند تقاضاي ديالوگ با سايت‌هاي ديگر را به يك وب سرويس روي سايتي كه صفحه وب از آنجا آمده است بفرستد و اين وب‌سرويس (كه روي ميزبان سايت قرار دارد و با تمام اينترنت در ارتباط است) به صورت يك واسطه عمل كند و تقاضاهاي مورد نظر را براي سايت مقصد ارسال كند. اين وب سرويس‌هاي واسطه اصطلاحا Application Proxy ناميده مي‌شوند.

البته اي‌جكس مشكلات كوچك و جنبي ديگري هم دارد كه چندان مايه نگراني نيست ولي به هرحال قابل لمس هستند. به عنوان نمونه، نرم‌افزارهاي مبتني بر اي‌جكس از حجم زيادي جاوا اسكريپت استفاده مي‌كنند كه همه اينها در هر session دست‌كم يك‌بار بايد روي مرورگر بارگذاري شوند. بنابراين اولين باري كه چنين اينترفيسي بارگذاري مي‌شود صفحه وب آن‌قدر سنگين مي‌شود كه حتي با ارتباط باندپهن هم چند لحظه طول مي‌كشد كه صفحه بارگذاري شود.
 
در چنين شرايطي نوشتن يك موتور اي‌جكس هوشمند كه با كمتر ميزان كد بتواند بهترين كاركرد را داشته باشد، خود به يك چالش برنامه‌نويسي تبديل مي‌شود؛ ضمن اين‌كه كاربران وب در كشورهايي كه سرعت دسترسي به اينترنت در آنها به طور معمول زياد نيست بايد هنگام بارگذاري صفحات وب اين‌چنيني صبر پيشه كنند و برنامه‌نويسان نيز مراقب باشند تا در صورتي كه به دليل كندي خط يا قطع شدن‌ها لحظه‌اي آن، كدهاي جاوا اسكريپت به طور كامل روي مرورگر بارگذاري نشد، نرم‌افزار دچار خطا و اشتباه نشود و بتواند اين مشكلات را از طريق بارگذاري مجدد و هوشمندانه كد جاوا اسكريپت روي كلاينت، مديريت كند.

جنبش Open Ajax هم از راه رسيد
 
در كنار همه تحولاتي كه به دنبال ظهور پديده اي‌جكس در صنعت نرم‌افزار پديد آمده است، يك خبر مهم نيز قابل توجه است. شركت IBM كه خود از پيشگامان فناوري XML است، در ابتداي ماه فوريه 2006 اعلام كرد يك ائتلاف بزرگ صنعتي متشكل از شركت‌‌هاي بورلند، BEA Systems ،Zend، ناول، ياهو، موزيلا، ردهت، اوراكل و بنياد اكليپس ايجاد كرده است كه در نظر دارد براي توسعه يك پياده‌سازي فراگير و اپن سورس از اي‌جكس تلاش كند. پيش بيني مي‌شود كه اين پياده‌سازي به يكي از استانداردهاي اصلي اي‌جكس در صنعت نرم‌افزار تبديل شود. آي‌بي‌ام در نظر دارد مجموعه Toolkit ‌پيشنهادي خود را از طريق بنيادهاي موزيلا و اكليپس در دسترس جامعه اپن سورس قراردهد. در همين رابطه شركت Zimbra، يك سازنده نرم‌افزارهاي مبتني بر اي‌جكس درنظردارد مجموعه Toolkit خود را تحت ليسانس موزيلا و Apache در اختيار برنامه‌نويسان قرار دهد.
 

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

پياده سازي Ajax
يكي ديگر از مشكلاتي كه در ارتباط با اي‌جكس به نظر مي‌رسد اينست كه كار زيادي از برنامه‌نويس مي‌طلبد و در حال حاضر اجراي موفقيت‌آميز يك اينترفيس حرفه‌اي مبتني بر اي‌جكس كاري بسيار  دشوار و وقت‌گير است. يعني‌Ajax به همان اندازه كه كار بازديدكننده‌ها را آسان مي‌كند، كار برنامه‌نويسان را مشكل مي‌كند! با اين حال اي‌جكس روي پلتفرم‌هاي مختلف پياده‌سازي شده و مجموعه ابزارهاي مختلفي براي تسهيل كار برنامه‌نويسان عرضه شده است تا تجربه شيرين‌تري از Ajax داشته باشند.

برنامه‌نويسان ASP.NET در صورتي كه از نسخه دات نت 1.1 استفاده مي‌كنند مي‌توان از ماژولAjax.NET   استفاده كنند كه اولين پياده‌سازي دات‌نتي اي‌جكس و رايگان است. مايكروسافت در ASP.NET 2.0 اين فناوري را با نام Atlas وارد پلتفرم كرده است كه علاقه‌مندان مي‌توانند يكراست سراغ آن بروند.
 
براي پلتفرم جاوا نيز چندين پياده‌سازي مختلف، اغلب اپن سورس، وجود دارد. از جمله AjaxAnywhere و AjaxTagsرا ببينيد. همچنين چندين پياده‌سازي مخصوصPHP مي‌توانيد پيدا كنيد. ماژول‌هاي CPAINT و xajax از آن جمله‌اند. ماژول CPAINT براي ASP نيز قابل استفاده است. چند ماژول ديگر هم مانند GeneXus وجود دارند كه مالتي پلتفرم هستند. براي هريك از پلتفرم‌هاي Perl ،ColdFusion و Python نيز دست‌كم يك پياده‌سازي معروف وجود دارد.

|+| نوشته شده توسط محمد جاهد در پنجشنبه 18 آبان1385  |
 
 
بالا