ورود به مباحث كدنويسي ايجكس مقوله پيچيده و مفصلي است كه در اين مقاله نميگنجد، ولي خالي از لطف نيست كه كمي با شكل و قيافه كدهاي ايجكس آشنا شويد. كد زير نمونهاي از اعلان شي ء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 دستكم يكبار بايد روي مرورگر بارگذاري شوند. بنابراين اولين باري كه چنين اينترفيسي بارگذاري ميشود صفحه وب آنقدر سنگين ميشود كه حتي با ارتباط باندپهن هم چند لحظه طول ميكشد كه صفحه بارگذاري شود.
در چنين شرايطي نوشتن يك موتور ايجكس هوشمند كه با كمتر ميزان كد بتواند بهترين كاركرد را داشته باشد، خود به يك چالش برنامهنويسي تبديل ميشود؛ ضمن اينكه كاربران وب در كشورهايي كه سرعت دسترسي به اينترنت در آنها به طور معمول زياد نيست بايد هنگام بارگذاري صفحات وب اينچنيني صبر پيشه كنند و برنامهنويسان نيز مراقب باشند تا در صورتي كه به دليل كندي خط يا قطع شدنها لحظهاي آن، كدهاي جاوا اسكريپت به طور كامل روي مرورگر بارگذاري نشد، نرمافزار دچار خطا و اشتباه نشود و بتواند اين مشكلات را از طريق بارگذاري مجدد و هوشمندانه كد جاوا اسكريپت روي كلاينت، مديريت كند.