انتقل إلى محتوى الدرس
الدرس 129
تاريخ النشر: تاريخ التحديث:
دورة جافا سكريبت

استقبال ومعالجة استجابة الخادم في AJAXAJAX Handling Server Responses طريقة فحص readyState وكود 200، وقراءة النص عبر responseText، وضبط النوع عبر responseType

استقبل وعالج ردود الخادم في AJAX بدقة: تحقّق من المرحلة الرابعة readyState وكود النجاح 200، واقرأ responseText، واضبط responseType، وافحص رؤوس الاستجابة.
أقسام الدرس
4
الأمثلة
2
اللغة
العربية
المشاهدات
2,535
محتوى الدرس
في هذا الدرس 4تصفّح المواضيع

أثناء رحلة الطلب من المتصفح إلى الخادم وعودته، تتدرج قيمة الخاصية xhr.readyState من الرقم 0 حتى 4. عند استخدام المعالج onreadystatechange، يجب التحقق من الشرط المزدوج معاً: اكتمال النقل (readyState === 4) ونجاح كود الحالة (status ضمن النطاق 200..299) قبل لمس البيانات.

مخطط تدرج readyState من 0 إلى 4 وفحص كود النجاح 200 واستخراج جسم ورؤوس الاستجابة

يوضح الجدول المرجعي مراحل readyState الخمس بالتفصيل، وبمجرد بلوغ المرحلة الرابعة بنجاح توفر الخاصية الافتراضية xhr.responseText النص الكامل المرسل من الخادم لتحليله وعرضه:

قيمة readyStateالثابت القياسيالمعنى الدقيق في دورة الاتصال
0UNSENTأُنشئ الكائن ولم تُستدعَ open() بعد
1OPENEDاستُدعيت open() ويمكن الآن ضبط رؤوس الطلب
2HEADERS_RECEIVEDوصل كود الحالة ورؤوس استجابة الخادم
3LOADINGجاري تنزيل دفعات جسم الاستجابة
4DONEاكتملت عملية النقل بالكامل وجاهزة للفحص
JavaScript
const xhr = new XMLHttpRequest();
const out = document.getElementById('rs-out');
const url = 'data:text/plain,' +
  encodeURIComponent('Server Status: Operational (99.98%)');
xhr.onreadystatechange = () => {
  if (xhr.readyState === 4 && xhr.status === 200) {
    out.textContent = xhr.responseText;
  }
};
xhr.open('GET', url, true);
xhr.send();

بدلاً من تحليل النص يدوياً في كل مرة، يمكنك ضبط xhr.responseType = "json" قبل الإرسال! سيتولى محرك المتصفح تحليل البيانات تلقائياً ويسلمك الكائن الجاهز مباشرةً داخل الخاصية xhr.response (ومن القيم المدعومة أيضاً "blob" للملفات الثنائية و"document" للمستندات).

يرسل الخادم غالباً معلومات وصفية مهمة (كنوع المحتوى أو المتبقي من حد الطلبات أو عدد الصفحات) داخل حقول رأس الاستجابة. اقرأ أي حقل مفرد عبر xhr.getResponseHeader("Content-Type")، أو استعرض جميع رؤوس الاستجابة المتاحة كنص متعدد الأسطر عبر xhr.getAllResponseHeaders().

JavaScript
const json = '{"order":804,"status":"Shipped"}';
const blob = new Blob([json], { type: 'application/json' });
const xhr = new XMLHttpRequest();
const out = document.getElementById('ty-out');
xhr.responseType = 'json';
xhr.onload = () => {
  const ct = xhr.getResponseHeader('Content-Type');
  out.textContent = '#' + xhr.response.order + ' (' + ct + ')';
};
xhr.open('GET', URL.createObjectURL(blob), true);
xhr.send();
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس مراحل readyState الخمس مع التحقق من كود status، وقراءة النصوص بـ responseText، والتحليل التلقائي عبر responseType = "json" وxhr.response، وفحص رؤوس الاستجابة بـ getResponseHeader(). الخطوة التالية: انتقل إلى درس «قراءة بيانات XML عبر AJAX» لاستخراج البيانات من مستندات XML بأمان.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 xhr.readyState خاصية مرحلة الاتصال readyState
خاصية رقمية من 0 إلى 4 تتتبع مراحل تهيئة وإرسال واكتمال تنزيل طلب الشبكة.
للمراجعة
02 xhr.responseType خاصية تحديد نوع الاستجابة responseType
تضبط التحليل التلقائي للاستجابة (مثل json أو blob) ليوضع الناتج الجاهز في خاصية xhr.response.
للمراجعة
03 xhr.getResponseHeader() دالة قراءة رأس الاستجابة getResponseHeader
تستخرج قيمة حقل رأس محدد من رد الخادم دون حساسية لحالة الأحرف أو تعيد null عند غيابه.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 MIME MIME
Multipurpose Internet Mail Extensions
المعيار القياسي لتحديد نوع محتوى البيانات المرسلة والمستقبلة مثل application/json.
للمراجعة
02 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول الويب الذي يحدد أكواد حالة الاستجابة القياسية كالنجاح 200 وأخطاء 404 و500.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح مثال الاستجابة المهيكلة في محرر التجربة وغيّر رقم الطلب من 804 إلى 912 وتحقق من القراءة التلقائية.

  2. بدّل بين التبويب الأول والتبويب الثاني في محاكي الاستجابة لمقارنة التحليل اليدوي والتلقائي.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ما الرقم الذي يدل في خاصية xhr.readyState على اكتمال عملية نقل الاستجابة بالكامل (DONE)؟

02

بلوغ xhr.readyState القيمة 4 يضمن وحده أن الخادم أعاد بيانات سليمة بكود 200 دون أي خطأ 404 أو 500.

03

عند ضبط xhr.responseType = "json"، في أي خاصية تجد الكائن المحلل تلقائياً؟

04

أي دالة تسترجع قيمة حقل رأس استجابة واحد محدد مثل "Content-Type"؟

05

علامَ تدل المرحلة الثانية readyState === 2 (HEADERS_RECEIVED) في دورة الاتصال؟

06

إذا ضُبط xhr.responseType على "json" وأعاد الخادم نصاً تالفاً غير صالح، تصبح قيمة xhr.response مساوية لـ null.

07

أي دالة تُرجع جميع حقول رأس الاستجابة المسموح بقراءتها مجتمعةً في نص متعدد الأسطر؟

08

استدعاء JSON.parse(xhr.responseText) أثناء المرحلة الثالثة LOADING آمن دائماً لاكتمال الملف في تلك المرحلة.

09

في الطلبات العابرة للأصول CORS، ما حقل الرأس الذي يرسله الخادم للسماح للكود بقراءة رؤوس مخصصة؟

10

ما قيمة xhr.responseType المناسبة لتنزيل ملف ثنائي كصورة أو PDF في هيئة كائن Blob مباشرة؟