استفاده از AJAX به ما امکان میدهد قسمتی از صفحه را بدون رفتن به صفحهی جدید بروز کنیم.
فرض کنید لیستی از اسامی و قیمت کالاها را در اختیار داریم ، کاربر روی دکمهی جزییات کالا کلیک میکند ، جزییات کالا را با یک درخواست AJAX بارگزاری میکنیم و در یک Dialog به کاربر نمایش میدهیم .
آیا لینک دائمی برای این محتوای لود شده وجود دارد ؟ منظور این است آیا کاربر میتواند بدون تکرار مراحل قبلی و با استفاده از یک لینک جزییات آن کالا را مشاهده کند ؟
در این 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 استفاده شده ، این پراپرتی علامت # را هم بر میگرداند ، پس قبل یا بعد از ارسال مقدار این پراپرتی به سرور باید این علامت را حذف کرد.