كان إدخال XMLHttpRequest (XHR) في المتصفحات في منتصف عام 2000 بمثابة فوز كبير لمنصة الويب. دعونا نرى كيف يعمل.
- مقدمة
- طلب مثال XHR
- معلمات () مفتوحة إضافية
onreadystatechange
- إحباط طلب XHR
- مقارنة مع jQuery
- مقارنة مع الجلب
- طلبات عبر المجال
- تحميل الملفات باستخدام XHR
مقدمة
كان إدخال XMLHttpRequest (XHR) في المتصفحات في منتصف عام 2000 بمثابة فوز كبير لمنصة الويب. دعونا نرى كيف يعمل.
الأشياء التي تبدو طبيعية الآن ، في الماضي ، بدت وكأنها قادمة من المستقبل. أنا أتحدث عن GMail أو خرائط Google ، على سبيل المثال ، والتي كانت جميعها تعتمد في جزء كبير منها على XHR.
تم اختراع XHR في Microsoft في التسعينيات ، وأصبح معيارًا واقعيًا حيث قامت جميع المتصفحات بتطبيقه في الفترة 2002-2006. W3C الموحد XMLHttpRequest في عام 2006.
كما يمكن أن يحدث أحيانًا في Web Platform ، في البداية كان هناك عدد قليل من التناقضات التي جعلت العمل مع XHR مختلفًا تمامًا عبر المستعرضات.
اكتسبت مكتبات مثل jQuery زيادة في الشعبية من خلال توفير طريقة تجريدية سهلة الاستخدام للمطورين ، وهذا بدوره ساعد في نشر استخدام هذه التقنية.
طلب مثال XHR
تقوم التعليمة البرمجية التالية بإنشاء كائن طلب XMLHttpRequest (XHR) ، وإرفاق دالة رد اتصال تستجيب علىonreadystatechange
حدث.
تم إعداد اتصال xhr لتنفيذ طلب GET لـhttps://yoursite.com
، وقد بدأ بـsend()
طريقة:
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
xhr.status === 200 ? console.log(xhr.responseText) : console.error('error')
}
}
xhr.open('GET', 'https://yoursite.com')
xhr.send()
معلمات () مفتوحة إضافية
في المثال أعلاه ، مررنا الطريقة وعنوان URL للطلب.
يمكننا أيضًا تحديد طرق HTTP الأخرى - (get
وpost
وhead
وput
وdelete
وoptions
).
تتيح لك المعلمات الأخرى تحديد علامة لجعل الطلب متزامنًا إذا تم تعيينه على خطأ ، ومجموعة من بيانات الاعتماد لمصادقة HTTP:
open(method, url, asynchronous, username, password)
onreadystatechange
الonreadystatechange
يتم استدعاء عدة مرات أثناء طلب XHR. نحن نتجاهل صراحة جميع الدول بخلافreadyState === 4
، مما يعني أن الطلب قد تم.
الدول
- 1 (مفتوح): يبدأ الطلب
- 2 (HEADERS_RECEIVED): تم استلام رؤوس HTTP
- 3 (LOADING): يبدأ الرد في التنزيل
- 4 (تم): تم تنزيل الرد
إحباط طلب XHR
يمكن إحباط طلب XHR بالاتصال بـabort()
طريقة علىxhr
موضوع.
مقارنة مع jQuery
باستخدام jQuery ، يمكن ترجمة هذه الأسطر إلى:
$.get('https://yoursite.com', data => {
console.log(data)
}).fail(err => {
console.error(err)
})
مقارنة مع الجلب
مع الجلب APIهذا هو الكود المكافئ:
fetch('https://yoursite.com')
.then(data => {
console.log(data)
})
.catch(err => {
console.error(err)
})
طلبات عبر المجال
لاحظ أن اتصال XMLHttpRequest يخضع لقيود معينة يتم فرضها لأسباب أمنية.
أحد أكثرها وضوحًا هو تطبيق نفس سياسة المنشأ.
لا يمكنك الوصول إلى الموارد على خادم آخر ،ما لميدعم الخادم هذا بشكل صريح باستخدامCORS (تقاسم الموارد عبر المنشأ).
تحميل الملفات باستخدام XHR
تحقق من البرنامج التعليمي الخاص بي علىكيفية تحميل الملفات باستخدام XHR.
تحميل مجانيدليل جافا سكريبت للمبتدئين
المزيد من دروس المتصفح:
- تتوفر بعض الحيل المفيدة في HTML5
- كيف أنشأت موقع ويب يستند إلى CMS يعمل دون اتصال بالإنترنت
- الدليل الكامل لتطبيقات الويب التقدمية
- واجهة برمجة تطبيقات الجلب
- دليل Push API
- واجهة برمجة تطبيقات Channel Messaging
- دروس عمال الخدمة
- دليل ذاكرة التخزين المؤقت API
- دليل API الإخطار
- الغوص في IndexedDB
- واجهة برمجة تطبيقات المحددات: querySelector و querySelectorAll
- تحميل JavaScript بكفاءة مع التأجيل وغير المتزامن
- نموذج كائن المستند (DOM)
- واجهة برمجة تطبيقات Web Storage: التخزين المحلي وتخزين الجلسة
- تعرف على كيفية عمل ملفات تعريف الارتباط HTTP
- واجهة برمجة تطبيقات التاريخ
- تنسيق صورة WebP
- طلب XMLHttpRequest (XHR)
- برنامج تعليمي متعمق SVG
- ما هي عناوين URL للبيانات
- خارطة الطريق لتعلم منصة الويب
- CORS ، تقاسم الموارد عبر الأصول
- عمال الويب
- دليل requestAnimationFrame ()
- ما هو النوع
- العمل مع DevTools Console وواجهة برمجة تطبيقات وحدة التحكم
- واجهة برمجة تطبيقات تركيب الكلام
- كيفية انتظار حدث جاهز لـ DOM في JavaScript عادي
- كيفية إضافة فئة إلى عنصر DOM
- كيفية تكرار عناصر DOM من querySelectorAll
- كيفية إزالة فئة من عنصر DOM
- كيفية التحقق من وجود فئة لعنصر DOM
- كيفية تغيير قيمة عقدة DOM
- كيفية إضافة حدث نقرة إلى قائمة عناصر DOM التي تم إرجاعها من querySelectorAll
- WebRTC ، واجهة برمجة تطبيقات الويب في الوقت الفعلي
- كيفية الحصول على موضع التمرير لعنصر في JavaScript
- كيفية استبدال عنصر DOM
- كيفية قبول الصور فقط في حقل ملف الإدخال
- لماذا تستخدم نسخة معاينة من المتصفح؟
- كائن النقطة
- كائن الملف
- كائن FileReader
- كائن FileList
- ArrayBuffer
- ArrayBufferView
- كائن URL
- صفائف من النوع
- كائن DataView
- واجهة برمجة تطبيقات BroadcastChannel
- واجهة برمجة تطبيقات Streams
- كائن FormData
- كائن المستكشف
- كيفية استخدام واجهة برمجة تطبيقات تحديد الموقع الجغرافي
- كيفية استخدام getUserMedia ()
- كيفية استخدام Drag and Drop API
- كيفية العمل مع التمرير على صفحات الويب
- التعامل مع النماذج في JavaScript
- أحداث لوحة المفاتيح
- أحداث الماوس
- أحداث اللمس
- كيفية إزالة جميع العناصر الأبناء من عنصر DOM
- كيفية إنشاء سمة HTML باستخدام Vanilla Javascript
- كيف تتحقق مما إذا كان مربع الاختيار محددًا باستخدام JavaScript؟
- كيفية النسخ إلى الحافظة باستخدام JavaScript
- كيفية تعطيل زر باستخدام JavaScript
- كيفية جعل صفحة قابلة للتحرير في المتصفح
- كيفية الحصول على قيم سلسلة الاستعلام في JavaScript باستخدام URLSearchParams
- كيفية إزالة جميع CSS من صفحة مرة واحدة
- كيفية استخدام insertAdjacentHTML
- سفاري ، حذر قبل الإقلاع عن التدخين
- كيفية إضافة صورة إلى DOM باستخدام JavaScript
- كيفية إعادة تعيين نموذج
- كيفية استخدام خطوط جوجل