ما هي تقنية أجاكس - AJAX
Ahmed AbuelfatehAhmed Abuelfateh

ما هي تقنية أجاكس - AJAX

ما هي تقنية أجاكس - AJAX، تعريفها، وكيفية إستخدام تقنية الـ أجاكس AJAX بإستخدام لغة البرمجة JavaScript، ومثال على تقنية أجاكس - AJAX، بإستخدام لغة البرمجة JavaScript و PHP

ما هو أجاكس - AJAX؟

أجاكس Ajax هو إختصار للمصطلح Asynchronous JavaScript And XML، وهو عبارة عن مجموعة من التقنيات المستخدمة في تطوير مواقع الويب لإنشاء تطبيقات ويب غير متزامنة.

ولتبسيط هذا المفهوم، فإن تقنية الأجاكس تمكن تطبيقات الويب (المواقع الإلكترونية) من إرسال وإستقبال البيانات من وإلى خادم الويب بطريقة غير متزامنة، بمعنى أن تطبيق الويب يمكن أن يرسل أو يستقبل بيانات من خادم الويب دون أن يؤثر على صفحة الويب التي تم تحميلها بالفعل.

عادة ما تستخدم تقنية الأجاكس مع واجهة برمجة التطبيقات، والمعروفة بـ API.

كيفية إستخدام تقنية الـ أجاكس Ajax

عند إستخدام تقنية الأجاكس فإن تطبيق الويب يقوم بعمل إتصال مع الخادم، والهدف الأساسي من هذا الإتصال إما إرسال أو إستقبال البيانات من وإلى الخادم، ولكي يتم إنشاء هذا الإتصال يتم إستخدام لغة البرمجة جافاسكريبت وتحديدا يتم إستخدام الكائن (Object) المسمى XMLHttpRequest وهو الـ Object الرئيسي والذي يتم من خلاله الإتصال وإرسال وإستقبال البيانات من وإلى خادم الويب، ولذلك يجب إنشاء نسخة أو مرجع لهذا الكائن (Instance) ويتم ذلك كالتالي

JavaScript

var xhr = new XMLHttpRequest();

وبذلك نكون قد أنشأنا وسيلة التعامل مع الـ Ajax، ولكي نبدأ الإتصال بالخادم نستخدم الدالة open وهي دالة من دوال الكائن XMLHttpRequest ويتم ذلك كالتالي

xhr.open("POST", "https://abuelfateh.com/api.php", true);

من الكود السابق سوف تلاحظ أننا إستخدمنا الدالة open وقمنا بإستخدام ثلاثة معطيات أو خصائص أو arguments، وهم POST وهي طريقة إرسال البيانات إلى الخادم ويمكن أن نستخدم GET أو PUT وهم وسائل مختلفة لإرسال البيانات إلى الخادم، والـ argument الثاني هو عنوان التطبيق الذي سوف يستقبل البيانات، وفي هذه الحالة هو api.php، أما الـ parameter الثالث فقد إستخدمنا القيمة true وهي القيمة المسئولة عن تحديد التزامن للإتصال، والقيمة true هي القيمة الإفتراضية والتي تحدد أن الإتصال غير متزامن، وإذا إستخدمنا القيمة false فإنها تحدد أن الإتصال متزامن، وسوف نتعرف على الفرق بينهما لاحقا.

بعد فتح الإتصال مع الخادم يجب تحديد نوع البيانات التي سوف يتم إرسالها إلى الخادم، ويتم ذلك من خلال تحديد الترويسة (الـ Header) الذي يتم إرساله مع البيانات، ولكي نقوم بذلك سوف نستخدم الدالة setRequestHeader وهي أيضا أحد دوال الكائن XMLHttpRequest، ويتم ذلك كالتالي

xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xhr.setRequestHeader("Accept", "text/plain, text/html, application/xml, text/xml, application/json");

 الخطوة التالية بعد إنشاء الإتصال وتحديد نوعه (post, get, put, delete) وتحديد نوع البيانات من خلال الـ Header، يجب إنشاء الدالة التي سوف تستقبل الرد من الخادم، ويتم ذلك بإستخدام الحدث أو الـ Event المسمى onreadystatechange، وهو الحدث الذي يقوم المتصفح بإستدعائه في حالة إستقبال رد من الخادم، ويتم ذلك كالتالي

xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    // Handle the response
    console.log( xhr.responseText );
  }
};

في الكود السابق سوف تلاحظ إنشاء حدث أو Event، ومن خلاله نتحقق من الخاصية readyState والخاصية status، وهما خصائص للكائن XMLHttpRequest، ودائما ما تحمل كل خاصية منهم قيمة محددة في كل مرحلة من مراحل إرسال وإستقبال البيانات بإستخدام تقنية الـ Ajax، وبما أننا في هذه الدالة أو الحدث نتحقق من إستقبال رد من الخادم، فإننا نتأكد من القيمة 4 للخاصية readyState وهي القيمة التي تحملها هذه الخاصية في حالة إكتمال عملية إرسال البيانات وإستقبالها بنجاح، ونتأكد أيضا من قيمة الخاصية status وهي القيمة التي يرسلها الخادم مع كل رد، والقيمة 200 هي التي تعبر عن نجاح عملية إرسال البيانات من الخادم إلى المستخدم، وفي داخل الأقواس المعقوفة للشرط يمكنك التعامل مع رد الخادم بإظهاره في صفحة الويب أو كما ترغب، في هذا المثال إستخدمنا الخاصية responseText وهي إحدى خصائص الكائن XMLHttpRequest وقيمتها هي رد الخادم على هيئة نص، وعادة ما يتم إستخدام هذه الخاصية للتعامل مع رد الخادم سواء كان الرد على هيئة نص أو بصيغة JSON.

وأخيرا يتبقى إرسال البيانات إلى الخادم، ويتم ذلك بإستخدام الدالة send، وهي أيضا إحدى دوال الكائن XMLHttpRequest، ويتم ذلك كالتالي

xhr.send("name=Ahmed&country=Egypt");

في الكود السابق قمنا بإرسال بيانات إلى الخادم بإستخدام تقنية (طريقة) الـ POST وهذه البيانات تحتوي على الإسم والبلد، ويمكنك إستقبالها في الخادم والتعامل معها على أنها بيانات مرسلة بواسطة نموذج HTML.

مثال على إستخدام تقنية أجاكس Ajax

فلنفترض أننا نريد أن نتحقق من إسم المستخدم إذا كان مسجل في الموقع أم لا، بإستخدام تقنية الـ Ajax

في هذا المثال سوف نحتاج إلى إنشاء ملف واحد بصيغة PHP، حيث سوف يحتوي على الكود الخاص بالخادم يليه كود صفحة الـ HTML و كود الجافا سكريبت الخاص بتقنية الـ Ajax.

PHP/HTML/JavaScript

<?php
if (isset($_POST['user']) && !empty($_POST['user'])) {
  // يمكنك البحث في قاعدة البيانات عن الإسم ثم إرسال الرد
  if ($_POST['user'] === "ahmed")
    echo "The User exists is DataBase.";
  else
    echo "You can use {$_POST['user']} Username.";
  exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Test Ajax</title>
</head>
<body>
  <input type="text" id="username" placeholder="Username" />
  <br />
  <input type="button" value="Check" id="btn" />
  <p id="response"></p>
 
<script type="text/javascript">
function ajax() {
  var xhr = new XMLHttpRequest();
  xhr.open("POST", window.location.href, true);
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  xhr.setRequestHeader("Accept", "text/plain, text/html, application/xml, text/xml, application/json");
 
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
      // Handle the response
      document.getElementById("response").innerHTML = xhr.responseText;
    }
  };
 
  xhr.send("user="+document.getElementById("username").value);
}
 
document.getElementById("btn").addEventListener("click", ajax, false);
</script>
</body>
</html>

الملف السابق يحتوي على صفحة HTML بسيطه، تحتوي على عنصر لكتابة إسم المستخدم وزر لإرسال البيانات بعد الإنتهاء، وتحتوي على أكواد الـ JavaScript الخاصة بتقنية الـ Ajax لإرسال ما سوف يكتبه المستخدم في حقل إسم المستخدم، وسوف تلاحظ أننا وضعنا كل أكواد الـ Ajax في داخل دالة قمنا بتسميتها ajax، وقمنا بإستخدامها في الحدث click والذي بدوره سوف يستدعيها عند الضغط على زر الإرسال.

وسوف تلاحظ أيضا أننا إستخدمنا window.location.href أثناء إنشاء الإتصال، وهذه خاصية من خواص الكائن window والتي تحتوي على عنوان الصفحة الحالية، أي أننا نرسل البيانات إلى الخادم من خلال نفس الصفحة.

في هذا المثال سوف نفترض أننا نمتلك إسم مستخدم واحد في قاعدة البيانات وهو ahmed، ولذلك نقوم بالتحقق من الإسم الذي يقوم المستخدم بإدخاله، إذا كان مساوي للإسم ahmed فنرسل له رسالة توضح أن الإسم مستخدم، وإذا أدخل إسم آخر نرد عليه بأن هذا الإسم متاح.

وبذلك نكون قد إنتهينا من تعلم أساسيات تقنية الـ Ajax، يمكنك تطبيق هذا المثال وإذا كان لديك أي إستفسار يمكنك كتابة تعليق بإستفسارك.

7911

Discussion

  • محمد
    محمد
    ماهو الفرق. بين تقنيه اجاكس ولغة الباك اند ؟ مثل(php,nodejs,ruby)
    • Reply to محمد
    • Captcha
    • Notify me of follow up comments via email.

    • Ahmed Abuelfateh
      Ahmed Abuelfateh
      تقنية AJAX هي تقنية مساعدة للغة البرمجة المستخدمة في الباك إند، وهي معتمدة بشكل رئيسي على لغة الجافاسكريبت.
      حيث تساعدك في إرسال بيانات محددة من جهاز المستخدم إلى الخادم وتمكنك من إستقبال الرد من الخادم على هذه البيانات.
      عادة تستخدم لغات البرمجة في الباك إند لإعداد صفحات ديناميكية، وعند بناء الصفحة يتم إرسالها إلى المتصفح لعرض المحتوى الذي تم إنشاؤه، وبذلك تنتهي مهمة الباك إند، ولكن في بعض التطبيقات نحتاج إلى بناء الصفحات على عدة مراحل على حسب سلوك المستخدم، على سبيل المثال في موقعنا نقوم بعرض عدد محدد من المقالات عند زيارة المدونة، وعند رغبة المستخدم في عرض المزيد من المقالات يقوم بالضغط على زر تحميل المزيد ليتم عرض باقي المقالات، لكي يتم ذلك يجب كتابة كود أجاكس ليرسل للغة الباك إند يطلب محتوى جديد ويجب كتابة كود في الباك إند ليرد على الطلب بالمحتوى الجديد.
      وبذلك لايمكن المقارنة بين AJAX وأي لغة برمجة أخرى، لأنها وسيلة مساعدة وليست لغة برمجة مستقلة، (مجموعة من الدوال التي يدعمها المتصفح ويتم إستدعاؤها عن طريق لغة البرمجة جافا سكريبت).
      • Reply to Ahmed Abuelfateh
      • Captcha
      • Notify me of follow up comments via email.

  • Othman
    Othman
    ممكن اعرف ماهي ميزات وعيوب AJAX . شكرا تعبكم
    • Reply to Othman
    • Captcha
    • Notify me of follow up comments via email.

  • Othman
    Othman
    ممكن اعرف ماهي ميزات وعيوب AJAX . شكرا تعبكم
    • Reply to Othman
    • Captcha
    • Notify me of follow up comments via email.

  • Abood
    Abood
    ok ok
    • Reply to Abood
    • Captcha
    • Notify me of follow up comments via email.

  • Hhhh
    Hhhh
    fufuf
    • Reply to Hhhh
    • Captcha
    • Notify me of follow up comments via email.

  • Hhhh
    Hhhh
    fufuf
    • Reply to Hhhh
    • Captcha
    • Notify me of follow up comments via email.

  • Add new Comment
  • Captcha
  • Notify me of follow up comments via email.