XMLHttpRequest لـ AJAX
- الصفحة السابقة XMLHttp AJAX
- الصفحة التالية رد AJAX
يستخدم obj XMLHttpRequest لتبادل البيانات مع الخادم.
إرسال طلب إلى الخادم
لإرسال طلب إلى الخادم، نستخدم obj XMLHttpRequest open()
و send()
الطريقة:
xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
الطريقة | الوصف |
---|---|
open(method, url, async) |
يحدد نوع الطلب
|
send() | إرسال طلب إلى الخادم (للـ GET) |
send(string) | إرسال طلب إلى الخادم (للـ POST) |
GET أم POST؟
GET أسرع وأبسط من POST، ويمكن استخدامه في معظم الحالات.
على أي حال، استخدم POST دائمًا في الحالات التالية:
- ملفات المخزنة ليست خيارًا (تحديث ملفات الخادم أو قاعدة البيانات)
- إرسال بيانات كبيرة إلى الخادم (لا يوجد حد لحجم POST)
- إرسال إدخال المستخدم (يمكن أن يحتوي على أحرف غير معروفة)، POST أكثر قوة وأمانًا
طلب GET
طلب GET بسيط:
مثال
xhttp.open("GET", "demo_get.asp", true); xhttp.send();
في الأمثلة السابقة، قد تحصل على نتائج مخزنة. لتجنب هذا، أضف ID فريد إلى URL:
مثال
xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true); xhttp.send();
إذا كنت بحاجة إلى إرسال معلومات باستخدام طريقة GET، فأضف هذه المعلومات إلى URL:
مثال
xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true); xhttp.send();
طلب POST
طلب POST بسيط:
مثال
xhttp.open("POST", "demo_post.asp", true); xhttp.send();
إذا كنت ترغب في إرسال بيانات مثل نموذج HTML، فاستخدم setRequestHeader()
أضف رأس HTTP. يرجى في send()
يحدد القانون في الطريقة البيانات التي تحتاج إلى إرسالها:
مثال
xhttp.open("POST", "ajax_test.asp", true); xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhttp.send("fname=Bill&lname=Gates");
الطريقة | الوصف |
---|---|
setRequestHeader(header, value) |
إضافة رأس HTTP إلى الطلب
|
url - ملف على الخادم
للمعامل url المعامل، هو عنوان الملف على الخادم:
xhttp.open("GET", "ajax_test.asp", true);
يمكن أن يكون هذا الملف من أي نوع، مثل .txt و.xml، أو ملفات سكربت على الخادم، مثل .asp و.php (يمكن تنفيذها على الخادم قبل إرسال الرد).
متزامن - true أم false؟
لإرسال الطلب بشكل متزامن،open()
الطريقة async يجب إعداد المعامل true
:
xhttp.open("GET", "ajax_test.asp", true);
إرسال طلب متزامن يمثل تقدماً كبيراً للمطورين على الويب. العديد من المهام التي تنفذ على الخادم تستغرق وقتاً طويلاً. قبل AJAX، قد يؤدي هذا إلى تعطيل أو توقف التطبيق.
من خلال إرسال متزامن، لا يجب أن ينتظر JavaScript رد الخادم، بل يمكنه:
- تنفيذ سكربتات أخرى أثناء انتظار رد الخادم
- معالجة الرد عند استعداده
سمة onreadystatechange
من خلال XMLHttpRequest، يمكنك تعريف الوظيفة التي يتم تنفيذها عند استلام الرد على الطلب.
هذه الوظيفة تتمثل في XMLHttpResponse onreadystatechange
المحددة في سمة
مثال
xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = this.responseText; } }; xhttp.open("GET", "ajax_info.txt", true); xhttp.send();
ستتعلم المزيد عن onreadystatechange في الفصول القادمة.
الطلب المتزامن
للتنفيذ الطلب المتزامن، يرجى إدخال open()
ثالثة معلمة في دالة false
:
xhttp.open("GET", "ajax_info.txt", false);
يُستخدم async = false أحياناً للتحقق بسرعة. ستجد أيضًا طلبات متزامنة في كود JavaScript الأقدم.
بسبب أن الكود سينتظر اكتمال الخادم، لذا لا تحتاج إلى دالة onreadystatechange:
مثال
xhttp.open("GET", "ajax_info.txt", false); xhttp.send(); document.getElementById("demo").innerHTML = xhttp.responseText;
نحن لا نوصي باستخدام XMLHttpRequest المتزامن (async = false) لأن JavaScript سيتوقف عن التنفيذ حتى يتم استجابة الخادم.
يُتخلص من XMLHttpRequest المتزامن من معايير الويب، ولكن هذا العمل قد يستغرق سنوات عديدة.
يُشجع أدوات التطوير الحديثة على إصدار تحذيرات حول استخدام الطلبات المتزامنة، وقد يُتخلص من InvalidAccessError استثناء عند حدوث ذلك.
- الصفحة السابقة XMLHttp AJAX
- الصفحة التالية رد AJAX