صفحة 1 من 4 1234 الأخيرةالأخيرة
النتائج 1 إلى 15 من 59

الموضوع: (أول درس في القسم) مقدمة في الأجاكس والXMLHttpRequest

  1. #1
    عبدالعزيز الزرعوني
    تاريخ التسجيل
    Feb 2004
    المشاركات
    3,128

    (أول درس في القسم) مقدمة في الأجاكس والXMLHttpRequest



    السلام عليكم
    أولاً: مبروك لنا جميعاً الأقسام الجديدة في سوالف سوفت وهذا القسم الرائع..
    وأحب أن أبدأ بأول درس في هذا القسم نقلاً عن
    مجتمع مطوري المواقع DevPedia

    -------------------------------------------------------

    الأجاكس تقنية جديدة والتي أخذت الويب إلى مرحلة جديدة كليا والتي تسمى في الوقت الحالي بالويب 2.0، فما هي الأجاكس؟
    الأجاكس AJAX وهي بالعادة تكتب كاملة بالحروف اللاتينية الكبيرة لانها تعتبر اختصار لكلمة (Asynchronous java script And XML).

    والأجاكس كانت موجودة من زمان ولكن لم يعرف أحد أهميتها أو كيفية استخدامها بالشكل الصحيح حتى قامت شركة Google بتوظيفها في برامجها الجديدة كالGmail وGoogle maps، وتتيح الأجاكس لمطوري الويب بإضافة حيوية وديناميكية للموقع كإضافة معلومات حية كأسعار البورصة من دون الحاجة لإعادة تحميل الصفحات كلما أراد المستخدم أن يطلب معلومة من الServer-Side أوعن طريق الخادم، فلغات برمجة الويب تنقسم إلى قسمان Client-Side وهي كالجافاسكربت والvb سكربت وقسم يسمى بالServer-Side وهي كالphp و الasp، و تقنية الأجاكس في الأساس هي استخدام للغة الجافاسكربت وهي لغة Client-Side لطلب أي معلومة موجودة على الServer-Side من دون الحاجة لطلب كامل الصفحة.

    وهناك اعتقاد خاطئ عند بعض الناس أن الأجاكس هي لغة جديدة وصعبة ويجب تعلمها من الصفر، والصحيح أن الأجاكس هي تقنية تستخدم لغة الجافاسكربت بالكامل لطلب المعلومات، فإذا كنت تعرف القليل عن الجافاسكربت أو حتى إن لم تكن تعرف ولكن لديك خبرة في اللغات المشتقة من لغة الC كالphp فسيكون تعلم الجافاسكربت بالنسبة لك شيء سهل وبسيط جدا وسأحاول بإذن الله شرح هذه التقنية الجميلة بسهولة بحيث أنك تتقنها في عند انتهاءك من قراءة هذا الدرس.

    ستجد تحت الكود الكامل بالجافاسكربت لعمل بسيط بالأجاكس والXMLHttpRequest وسأشرح كل جزء منه على حده.
    كود:
    function createRequestObject() {
    var req;
    if(window.XMLHttpRequest){
    // لمتصفحات الفايرفروكس والأوبرا والسفاري
    req = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
    // للإنترنت اكسبلورر النسخة الخامسة فما فوق
    req = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    // نستخدم دالة ال alert لكي نظهر حصول خطأ وغالبا يكون الخطأ لمستخدمي نسخ قديمة من المتصفحات
    alert('حصل خطأ في طلب الصفحة...الرجاء المحاولة مرة أخرى وإذا لم تنفع جرب أن تنزل نسخة جديدة من المتصفح');
    }
    return req;
    }
    // نطلب الدالة createRequestObject() ونعطي الناتج للمتغير http
    var http = createRequestObject();
    function sendRequestGet(act) {
    // نطلب صفحة ال php
    http.open('get', 'myphpscript.php?act='+act, true);
    // عندما ننتهي من طلب الصفحة نطلب دالة handleResponse
    http.onreadystatechange = handleResponse;
    // الانتهاء من الطلب
    http.send(null);
    }
    function handleResponse() {
    if(http.readyState == 4 && http.status == 200){
    // نعطي المتغير response النص اللذي رجع من طلبنا لصفحة ال php
    var response = http.responseText;
    if(response) {
    // نحدث محتوى ال div والتي اسمها ajaxTest
    document.getElementById("ajaxTest").innerHTML = response;
    }
    }
    }
    البداية...
    كود:
    function createRequestObject() {
    var req;
    if(window.XMLHttpRequest){
    // لمتصفحات الفايرفروكس والأوبرا والسفاري
    req = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
    // للإنترنت اكسبلورر النسخة الخامسة فما فوق
    req = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    // نستخدم دالة ال alert لكي نظهر حصول خطأ وغالبا يكون الخطأ لمستخدمي نسخ قديمة من المتصفحات
    alert('حصل خطأ في طلب الصفحة...الرجاء المحاولة مرة أخرى وإذا لم تنفع جرب أن تنزل نسخة جديدة من المتصفح');
    }
    return req;
    }
    هذا الكود سهل وهي عبارة عن دالة اسمها createRequestObject وهي تتحق من نوع المتصفح لديك وأذا ماكن يدعم ال XMLHttpRequestأو لا.أولا عرفنا متغير جديد اسمه req وهو خالي ومن ثم نتحقق دالة window.XMLHttpRequest إذا أرجع لنا True فإن المتصفح سيكون فايرفوكس أو أوبرا أو سفاري، لذلك سنعطي المتغير req اللذي عرفناه في البداية بداية جديدة ل XMLHttpRequest()وهي دالة متعرفة سابقا في هذه المتصفحات للتعامل مع الأجاكس والXMLHttpRequest، أما إذا كان التحقق الأول فشل ونجح التحقق الثاني وهو window.ActiveXObject فسيكون المتصفح انترنت اكسبلورر وسنتخدم دالة متعرفة في هذا المتصفح اسمها ActiveXObject("Microsoft.XMLHTTP") وسنعطيها للمتغير req.

    إذا فشلت كل المحاولات اذا المتصفح إما يكون قديما أو أنه لايدعم الXMLHttpRequest، وفي آخر الدالة نرجع مايحتويه المتغير req.

    وبعد ذلك نعرف متغير جديد ونسميه http ونعطيه نسخه من الدالة createRequestObject وسيحتوي جميع الخصائص للXMLHttpRequest.
    كود:
    var http = createRequestObject();
    وكما تعرفون هناك طريقتان لطلب المعلومات من الServer-Side وهما باستخدام طريقة GET وطريقة POST وطلب المعلومات باستخدام الأجاكس يختلف قليلا باختلاف طريقة الطلب وسأشرح هنا الطريقتين:
    طلب المعلومات باستخدام طريقة GET
    انتهينا من تعريف المتغير الجديد والذي سميناه http واعطيناه خصائص الXMLHttpRequest، الآن سنطلب المعلومات بطريقة GET من صفحة الphp:
    كود:
    function sendRequestGet(act) {
    // نطلب صفحة ال php
    http.open('get', 'myphpscript.php?act='+act, true);
    // عندما ننتهي من طلب الصفحة نطلب دالة handleResponse
    http.onreadystatechange = handleResponse;
    // الانتهاء من الطلب
    http.send(null);
    }
    ولايهم اللغة المستخدمة للServer-Side يمكن أن تكون php أو asp لايهم لانهما تعتبران لغات Server-Side كما أسلفنا.

    هنا ترى دالتان يجب عليك فهمها وهما من خصائص الXMLHttpRequest هما open() و send()، في أول سطر نطلب الصفحة باستخدام طريقة get وهي تكون أول متغير في الدالة open() وأول متغير يكون نوع طلب الصفحة كما سنرى في القسم التالي والمتغير الثاني في الدالة يكون الصفحة المطلوبة وفي حالتنا هذه نطلب صفحة اسمها myphpscript.php وتأخذ متغير اسمه act ومتغير act نأخذه بالجافاسكربت ونضعه عندما نطلب الصفحة. ولأننا نستخدم طريقة GET فهي تأخذ المتغيرات عن طريق شريط التصفح لذلك نطلب دالة send() ونعطيها الأمر null، ولكن طريقة POST لاتأخذ متغيراتها عن طريق شريط التصفح لذلك تتغير قليلا عندما نطلب المعلومات، أما المتغير الثالث للداله فهو لاستخدام الطلب الغير تزامني أو الasynchronous للأجاكس ونعطيه true، والسطر:
    كود:
    http.onreadystatechange = handleResponse;
    هي تقول للXMLHttpRequest انه عندما تنتهي من طلب المعلومة وعند الاستعداد اطلب الدالة handleResponse() وهي دالة سنأتي لذكرها لاحقا

    طلب المعلومات باستخدام طريقة POST
    كود:
    function sendRequestPost(act) {
    // نطلب صفحة ال php
    http.open('post', 'myphpscript.php', true);
    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    // عندما ننتهي من طلب الصفحة نطلب دالة handleResponse
    http.onreadystatechange = handleResponse;
    // الانتهاء من الطلب
    http.send('act='+act);
    }
    ستلاحظ التشابه إلى حد كبير بين الطريقتين POST و GET، ولكن الاختلاف ستلاحظه في الدالة send() وهي أننا نرسل المتغيرات التي نريدها عن طريقها بدلا من إطفائها عن طريق null وهذه هي أهم خطوة، وفي السطر:
    كود:
    http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    وهذا السطر مهم اذا كنت تستخدم طريقة POST في طلب المعلومات عن طريق forms

    اللمسات الأخيرة..
    كود:
    function handleResponse() {
    if(http.readyState == 4 && http.status == 200){
    // نعطي المتغير response النص اللذي رجع من طلبنا لصفحة ال php
    var response = http.responseText;
    if(response) {
    // نحدث محتوى ال div والتي اسمها ajaxTest
    document.getElementById("ajaxTest").innerHTML = response;
    }
    }
    }
    أول ما نتحقق عندما تطلب هذه الدالة هي http.readyState و http.status وسأشرح الحالات المختلفة لكل منهما

    هناك 5 أنواع من حالات الأستعداد للXMLHttpRequest وللعلم أن الحالة الأخيرة هي الأهم بينهم
    0: لم يتم البدء
    1: بدء عملية الاتصال
    2: تم استلام الطلب
    3: جاري تحليل الطلب والرد عليه
    4: تم الانتهاء

    أما http.status فكما تعرفون هناك حالات كثيرة عندما تطلب المعلومات ولعل من أشهرها حالة 404 وهي خطأ عدم وجود الصفحة على الخادم، أما 200 فأن الصفحة موجودة وتم استلامها بنجاح ولمعرفة الحالات المتنوعة عند طلب الصفحة الرجاء زيارة الرابط التالي:
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

    وعندما بتم التأكد من كل شيء بحالة سليمة نسمي متغير جديد باسم response ونعطيه http.responseText وهذا هو الرد من طلبنا لصفحة الphp أي أنه أي نص يتم طبعه على الصفحة عن الانتهاء من طلبها، ويجب التنويه هنا انه هناك نوعان من الردود، responseText و respon***ML ولكننا هنا نأخذ فقط النص الذي رجع إلينا من طلب صفحة الphp في السابق، وربما سأشرح كيفية التعامل مع الردود بالXML لاحقا.

    وبعد هذا وعندما يتم التأكد أن المتغير response يحمل نصا وليس فارغا يتم أخذ هذا النص ووضعه في الDiv التي اسمها ajaxTest.
    نهاية الدرس
    وقد حملت بعض الأمثلة لرؤية كيفية عمل الأجاكس وللإستفادة المطلقة من هذا الدرس
    المثال الأول: استخدام طريقة GET
    http://www.devpedia.org/articles/exa...s/demoGet.html
    المثال الثاني: استخدام طريقة POST
    http://www.devpedia.org/articles/exa.../demoPost.html

    وبهذا تم الانتهاء من أول درس في الأجاكس والXMLHttpRequest وأتمنى من الله أن أكون قد وفقت في هذا الدرس وتكونوا قد استفدتم منه.

    -------------------------------------------------------

    :: كتبه Bo3oof
    :: المصدر: http://www.devpedia.org/articles/index.php?p=17


    ======================

    ومن أراد المناقشة فبإمكانه ذلك هنا أيضاً لأن كاتب المقال معنا في سوالف

    وبالتوفيق للجميع ومبروك عليكم القسم ومبروك عليكم رمضان الكريم


    المبدع العربي ^_^





    __________________
    مدونة المبدع العربي




  2. اخوي المبدع .. جزاك الله الف خير على هذا الموضوع .. يحتاج الموضوع القرأة بتأني ... حتى نناقش معا الموضوع ... ونخرج في النهاية الاستفادة للجميع






  3. #3
    خبير JavaScript
    تاريخ التسجيل
    Jul 2002
    المشاركات
    2,920


    شكرا أخي المبدع على الدرس الأول و أخص بالشكر كاتبه أبوعوف
    وهذه أول تثبيتة مني لك






  4. #4
    عبدالعزيز الزرعوني
    تاريخ التسجيل
    Feb 2004
    المشاركات
    3,128


    ملك الفوتوشوب..
    حياك الله عزيزي.. اقرأه على راحتك وننتظرك

    زيزوار..
    حياك الله يالمشرف الكبير..
    جزاك الله خير وتسلم على التثبيت وفعلاً موضوع بوعوف يستاهل التثبيت بارك الله فيه وفيكم





    __________________
    مدونة المبدع العربي

  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2006
    المشاركات
    354


    شكراً أخى الكريم :nice:
    وبإنتظار بقية السلسلة بإذن الله
    وكل عام وإنتا بخير





    __________________
    Amr Elmogy
    www.shababvb.com

    Success is not everything, but the desire for success is everything.

  6. #6
    عضو نشيط
    تاريخ التسجيل
    Nov 2005
    المشاركات
    212


    شكراً أخى الكريم





    __________________
    مجموعة مجتمع الامارات
    اول شبكه اماراتيه اجتماعية خاصه
    ا

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2006
    المشاركات
    335


    شاكرين لك اخى الكريم





    __________________
    شبكة البيت للتصميمات وبرمجة الاسكربتات الخاصة
    http://www.Elbayt.NeT
    الزواج - العقارات -الاخبار- مجلات خاصة - نيوك - منتديات - قروبات - مستعمل - الجوال - الوظائف - واى من الاسكربتات الخاصة

  8. #8
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123


    مشكور اخوي





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي

  9. #9
    عضو نشيط
    تاريخ التسجيل
    Sep 2006
    المشاركات
    134


    شكرا أخي المبدع على الدرس الأول و أخص بالشكر كاتبه أبوعوف
    وهذه أول تثبيتة مني لك






  10. #10
    عضو نشيط
    تاريخ التسجيل
    Oct 2005
    المشاركات
    198


    موضوع رائع يا "المبدع العربي" وأخص بالشكر كاتبه "أبوعوف"





    __________________
    :: Can You Imagine Invision Board ::
    http://www.LibyanMasters.com

  11. #11
    عضو نشيط
    تاريخ التسجيل
    May 2006
    المشاركات
    229


    شكرا المبدع العربي
    رائع ولله
    وفى انتظار المزيد






  12. #12


    يعطيك الف عافية
    أخوي المبدع العربي
    فعل مبدع





    __________________
    ثامر العنزي
    فني تقنية شبكات الحاسب
    CCNA & MCSA
    http://www.thamer.ws
    thamer@thamer.ws

  13. #13
    عضو نشيط
    تاريخ التسجيل
    Aug 2004
    المشاركات
    89


    :nice: اول تسلم يمينك على الموضوع وان شاء الله نعرف الكثير منك
    انا ابى تعريف اول يعنى ايش لغات البرمجة القياسية
    :shy:
    شكرا أخوى






  14. #14
    عضو نشيط جدا
    تاريخ التسجيل
    Jun 2005
    المشاركات
    521


    درس شيق وممتع وأعجبتني الـ AJAX جدا

    ننتظر جديدك





    __________________
    ميكانيكــي منتديــات
    سمكــري تصاميـــــم
    عسكـــري مواقــــــع

    لا حول ولا قوة إلا بالله
    لا إله إلا انت سبحانك إني كنت من الظالمين

  15. #15
    عضو جديد
    تاريخ التسجيل
    Sep 2006
    المشاركات
    24


    تسلم يا اخوي علي هذه المبادره الطيبه





    __________________
    ....: عــاشـر من تعـاشـر فلـا بـد مـن فــراق :....
    http://www.developer-vB.com
    Info@Developer-vB.com





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض