أجاكس قادمة بقوة ومن أكبر المواقع التي قد قامت باستخدام هذه التقنية هي الشركة
الرائدة في مجال محركات البحث حيث قامت بتطوير موقع البحث والذي لازال
في نسخته التجريبية والمسمى :
Google Suggest
فقد وفرت الشركةخدمة Google Maps باستخدام نفس التقنية
إضافة الى المنافس البريدي القادم بقوة على الساحة GMAIL ....كل هذه الخدمات وفرتها شركة جوجل بهذه التقنية الفريدة .
واذا كان مصطلح Web 2.0 يلوح في الأفق فان من أقوى الداعمين لهذا العالم الجديد من تقنيات الويب هو أجاكس ...
ولكي لا أطيل عليكم وكما أسلفت أني سأكون تقنياًً نوعاً ما وأقوم بشرح ما استفدت منه من جراء عملي لتطبيقات بسيطة
عن هذه التقنية باستخدام C# أحب أن اضع الشرح المبسط التالي لكي يسهل على غيري العمل على هذه التقنية وبالتالي أوفر على غيري العناء الذي عانيته .
ولكني أحب التنويه الى ضرورة الدراية بابجديات العمل على الجافاسكريبت قبل البدأ ...ليس الكثير فقط أبجدياتها.
مفهوم التقنية ببساطة (من ناحية فنية برمجية) هي مناداة دوال مكتوبة في الcode behind بلغتي VB.Net أو C# من خلال دوال Java Script واستلام النتائج عن طريق هذه الاداة وبالتالي تقوم جافا سكريبت بعرضها أو عمل التعديلات عليها وبالتالي يتم الاتصال بالملقم من غير حصول اي عملية Post Back .اي هي أشبه بتحميل جزء صغير من الصفحة ...وهنا يكمن السحر .
قبل الاستخدام يجب انزال مكتبة الأداة والتي هي على شكل ملف DLL ومن ثم اضافتها في المشروع على شكل Referince .
بعد ذلك يجب التعديل في ملف web.config :
< configuration > < system.web > < httpHandlers > < add verb = "POST , GET" path = "ajax/*.ashx" type = "Ajax.PageHandlerFactory , Ajax" / > < /httpHandlers > ... < system.web >
الخطوة التالية تسجيل Ajax في الصفحة من خلال :
private void Page_Load(object sender , System.EventArgs e)
{Ajax.Utility.RegisterTypeForAjax(typeof(Webform1)
));
}حيث أن Webform1 هي اسم الclass الذي نقوم بالعمل عليه (الصفحة) .
بعد ذلك نقوم بكتابة الدالة المراد مناداتها من الجافا سكريبت ولكن يجب وضع السطر هذا قبل كتابتها وهو :
[Ajax.AjaxMethod]
لمثال :
[Ajax.AjaxMethod]
public DataSet GetData(int ID)
{
string query = "SELECT CategoryName FROM Categories where CategoryID = " + ID.ToString();
SqlConnection myConnection = new SqlConnection(GetConnectionString());
SqlDataAdapter ad = new SqlDataAdapter(query , myConnection);
DataSet ds = new DataSet();
ad.Fill(ds , "Categories");
return ds;
}لننتقل الان الى الخطوة التالية وهي استخدام هذه الدالة من خلال الجافاسكريبت كما أسلفنا من قبل :
ولكن يجب مراعات أنه عند مناداة هذه الدالة يجب الوصول الى هذا الاداة من خلال الnamespace
والذي غالباً ما يكون اسم المشروع ففي المثال التالي اسم الnamespace هو (اسم المشروع) :UsingAjax
< script language = javascript >
function FillTextBox(Id)
{
UsingAjax.GetData(Id , FillTextBox_CallBack);
}
< /script >لاحظ أن دالة جافا سكريبت السابقة تقوم بمناداة الدالة
GetDataالمكتوبة في السي شارب وتمرير المعاملات لها , المعامل المرر هو معرف التصنيف ..
سيتبادر الى ذهنك الاسئلة التالية:
1- ما هي :FillTextBox_CallBack؟؟؟؟؟؟
2-كيف اقوم باسترجاع البيانات من الدالة المكتوبة في السي شارب واعرضها على الصفحة ؟
أو بعبارة أخرى ما الذي استفدته أنا من تنفيذ كود السي شارب اذا لم أقم بعرض الناتج على الصفحة ؟
3-كيف اقوم بتغيير محتوى أداة ما ولتكن TextBoxمن غير عمل Post Back للصفحة ؟
والاجابات هي :
FillTextBox_CallBack
هي دالة جافا سكريبت أخرى سنقوم بكتابتها و وظيفة هذه الدالة استقبال
القيمة المرجعة من دالة السي شارب وبالتالي تعبئة الأداة الموجودة في الصفحة
من خلال سطر كود جافا سكريبت مما يعني تعبئة الأداة بالبيانات من غير عمل Post Back
للصفحة (أهم امتيازات الجافا سكريبت)...لنلقي نظرة على الدالة :
function FillTextBox_CallBack(response)
{
var ds = response.value;
if(ds! = null && typeof(ds) = = "object" && ds.Tables! = null)
document.getElementById("TextBox1").value = ds.Tables[0].Rows.CategoryName;
}لنلقي نظرة فاحصة على الكود أعلاه ....سنجد المعامل response وهو عبارة عن كائن object
يحوي القيمة المرجعة من خلال دالة السي شارب وبالتالي سيتم تعبئته بـDataSet المرجعة .
أي بمفهوم أن الدالة FillTextBox تقوم بمناداة دالتي المكتوبة في السي شارب وتمرير المعاملات لها (معرف التصنيف)
وبالتالي يتم تنفيذ الدالة في السي شارب ومن ثم ارجاع القيمة المرجعة الى الدالة FillTextBox_CallBack
أي أن FillTextBox أشبه ببوابة الخروج من كود الجافا سكريبت وFillTextBox_CallBack هي بوابة الرجوع اليها.
بعد ذلك عند استلامنا للقيمة المرجعة تأتي الخطوة التالية وهي تعبئة المكون كما أسلفنا وهي أبسط الخطوات
ولنأخد الطريقة المستخدمة في المثال السابق :
document.getElementById("TextBox1").value = ds.Tables[0].Rows.CategoryName;حيث في هذا المثال افترضنا أننا نريد إرجاع القيمة في مربع نص اسمه TextBox1 ...وهناك أكثر من طريقة لذلك .
بقي شيء واحد فقط ؟؟؟؟ وهو كيف اقوم بمناداة هذه الدوال ؟
أو كيف أبدأ الاستفادة من هذه الطريقة؟..
والاجابة تكمن في مناداتك للدالة الجافا سكريبت الاولى حسب رغبتك ....
عند حدوث تغيير في محتوى TextBox1 او عند الضغط على HTML Button ...
وسأترك الخيار في هذا لك .
ملحوظة :
أحب التنويه الى شي هنا هو ان المثال السابق يقوم بارجاع dataset من خلال كود السي شارب
كاملة لا تحوي سوى سجل واحد وهذا عملياً خطا ولكني قمت بوضعه كمثال بسيط لنتعامل مع هذه
التقنية الساحرة , وكان بامكاني استخدام مثال يقوم بارجاع رقم لكني فضلت أن اقوم بارجاع dataset
حتى اوضح للقارئ أن القيمة المرجعة تكون على شكل مكون وبالتالي التعامل معها يكون على هذا الأساس.
أرجو أن تكون أخي القاري إستفدت من هذا الدرس الذي جاء على عجل , وعذراً اذا كان يحوي
الكثير من البعثرة لكنها المرة الأولى لي في كتابة المقالات والدروس .... وإن شاء الله ما تكون الاخيرة
وانا في انتظار الاسئلة والتعليقات ......
محبكم ..
عثمان حمد


