استفاده از AJAX به ما امکان میدهد قسمتی از صفحه را بدون رفتن به صفحهی جدید بروز کنیم.
فرض کنید لیستی از اسامی و قیمت کالاها را در اختیار داریم ، کاربر روی دکمهی جزییات کالا کلیک میکند ، جزییات کالا را با یک درخواست AJAX بارگزاری میکنیم و در یک Dialog به کاربر نمایش میدهیم .
آیا لینک دائمی برای این محتوای لود شده وجود دارد ؟ منظور این است آیا کاربر میتواند بدون تکرار مراحل قبلی و با استفاده از یک لینک جزییات آن کالا را مشاهده کند ؟
برای فراهم ساختن یک لینک دائمی برای محتوای AJAX راه حل استفاده از windows.location.hash هست.
در این http://example.com/blah#456 مقدار HashTag ما برابر با 456 میباشد.
مقدار HashTag به سرور ارسال نمیشود و فقط سمت کلاینت قابل استفاده هستند.
<span class='button goodDetail' id='123' >جزییات کالا</span>
به Span بالا یک Attribute سفارشی افزوده شده که حاوی کلید اصلی کالا میباشد. هنگامی که روی این دکمه کلیک میشود با یک درخواست AJAX اطلاعات جزییات این کالا واکشی میشود و قسمتی از صفحه بروزسانی میشود :
$('.goodDetail').click(function(){ //add to hash data that you need to make the AJAX request later $(window).location.hash = $(this).attr('id'); $.ajax({ type: "POST", url: 'some url', dataType: "html", data:'GoodId='+$(this).attr('id'), success: function(html) { //do something } }) })
در خط سوم کد بالا Location hash را به کلید اصلی کالایی که روی آن کلیک شده است مقدار داده ایم. بعد از کلیک روی آن دکمه URL ما اینگونه خواهد بود : www.mysite.com/goods.aspx#123
123 همان کلید اصلی کالا است که در Attribute سفارشی در دکمهی جزییات کالا نگهداری میشده ، پس انتظار میرود اگر کاربر www.mysite.com/goods.aspx#123 را وارد کرد همان درخواست AJAX اجرا شود و جزییات کالای 123 به کاربر نشان داده شود.
در Document Ready صفحهی جزییات کالا چک میکنیم آیا Hash tag وجود دارد یا خیر ، اگر وجود داشت مقدار آن را به دست میآوریم ، درخواست AJAX را صادر میکنیم و اطلاعات کالای 123 را به کاربر نشان میدهیم :
$(document).ready(function(){ if ($(window).location.hash.length)) { //we will use $(window).location.hash.replace('#','') in the "data" section of the AJAX request $.ajax({ type: "POST", url: current_url, dataType: "html", data:'GoodId='+$(window).location.hash.replace('#',''), success: function(html) { //do something } }) } });
همانطور که مشاهده میکنید برای به دست آوردن مقدار Hashtag از کد پراپرتی hash شیء location استفاده شده ، این پراپرتی علامت # را هم بر میگرداند ، پس قبل یا بعد از ارسال مقدار این پراپرتی به سرور باید این علامت را حذف کرد.
این مثال Online را مشاهده کنید.