جلب/XMLHttpRequest في TypeScript
تشرح هذه المقالة جلب/XMLHttpRequest في TypeScript۔
يمكنك التعرف على كيفية استخدام Fetch API
و XMLHttpRequest
، بالإضافة إلى الاختلافات بينهما.۔
YouTube Video
جلب/XMLHttpRequest في TypeScript
في TypeScript، يتم عادةً تنفيذ طلبات HTTP باستخدام اثنين من واجهات برمجة التطبيقات: Fetch API
و XMLHttpRequest
۔ باستخدام TypeScript، يمكنك تقديم فحص الأنواع للطلبات والاستجابات عند إجراء الاتصال غير المتزامن مع هذه الواجهات البرمجية، مما يتيح لك كتابة كود أكثر أمانًا۔ فيما يلي، سنوضح كيفية استخدام كل منهما۔
Fetch API
Fetch API
هي واجهة برمجة تطبيقات تعتمد على الوعد وتُستخدم لإجراء الاتصالات غير المتزامنة (طلبات HTTP) ببساطة۔ في TypeScript، يمكنك إجراء الطلبات باستخدام طريقة fetch
ومعالجة الاستجابات بطريقة آمنة للأنواع۔
الاستخدام الأساسي
فيما يلي مثال أساسي باستخدام طلب GET
۔
1const url = 'https://jsonplaceholder.typicode.com/posts';
2
3fetch(url)
4 .then(response => {
5 if (!response.ok) {
6 throw new Error('Network response was not ok');
7 }
8 return response.json(); // Parse the response as JSON
9 })
10 .then(data => {
11 console.log(data);
12 })
13 .catch(error => {
14 console.error('Fetch error:', error);
15 });
- يرسل هذا الكود طلب
GET
إلى عنوان URL المحدد، ويحلل الاستجابة المستلمة كـ JSON، ويعرضها في وحدة التحكم.۔
التعامل الآمن مع البيانات في TypeScript
نظرًا لأن الاستجابة من طريقة fetch
تكون غير واضحة النوع، يمكنك الاستفادة من فحص الأنواع في TypeScript عن طريق تحديد نوع الاستجابة صراحةً۔
1// Define the type for the response data
2interface Post {
3 userId: number;
4 id: number;
5 title: string;
6 body: string;
7}
8
9const url = 'https://jsonplaceholder.typicode.com/posts';
10
11fetch(url)
12 .then(response => response.json())
13 .then((data: Post[]) => {
14 data.forEach(post => {
15 console.log(`Title: ${post.title}`);
16 });
17 })
18 .catch(error => {
19 console.error('Error fetching data:', error);
20 });
- يطبق هذا الكود نوع
Post
على البيانات المسترجعة باستخدامfetch
، ويعالج الاستجابة بطريقة آمنة من حيث النوع، ويعرض عنوان كل منشور في وحدة التحكم.۔
مثال على طلب POST
عند إرسال البيانات إلى الخادم، استخدم طريقة POST
۔ لإرسال JSON في جسم الطلب، حدد headers
و body
۔
1const postData = {
2 title: 'foo',
3 body: 'bar',
4 userId: 1
5};
6
7fetch('https://jsonplaceholder.typicode.com/posts', {
8 method: 'POST',
9 headers: {
10 'Content-Type': 'application/json'
11 },
12 body: JSON.stringify(postData)
13 })
14 .then(response => response.json())
15 .then(data => {
16 console.log('Created post:', data);
17 })
18 .catch(error => {
19 console.error('Error posting data:', error);
20 });
- يرسل هذا الكود البيانات بصيغة JSON إلى الخادم باستخدام طلب
POST
، ويتلقى الاستجابة كـ JSON، ويعرضها في وحدة التحكم.۔
Fetch
باستخدام الوظائف غير المتزامنة (async
/await
)
باستخدام async
/await
في TypeScript، يمكنك كتابة معالجة غير متزامنة بشكل أبسط۔
1// Define the type for the response data
2interface Post {
3 userId: number;
4 id: number;
5 title: string;
6 body: string;
7}
8
9async function fetchPosts() {
10 try {
11 const response = await fetch('https://jsonplaceholder.typicode.com/posts');
12 if (!response.ok) {
13 throw new Error('Network response was not ok');
14 }
15 const data: Post[] = await response.json();
16 console.log(data);
17 } catch (error) {
18 console.error('Fetch error:', error);
19 }
20}
21
22fetchPosts();
- يجلب هذا الكود بيانات المنشورات بشكل غير متزامن باستخدام بنية
async
/await
، ويعالج الاستجابة كنوعPost[]
، ويعرضها في وحدة التحكم.۔
XMLHttpRequest
XMLHttpRequest
هي واجهة برمجة تطبيقات أقدم وأكثر تعقيدًا بعض الشيء مقارنة بـ Fetch API
، ولكن يمكن استخدامها عندما يكون التوافق مع المتصفح أو التحكم المتقدم أكثر أهمية۔
الاستخدام الأساسي لـ XMLHttpRequest
فيما يلي مثال باستخدام طلب GET
۔
1const xhr = new XMLHttpRequest();
2xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts', true);
3
4xhr.onreadystatechange = function () {
5 if (xhr.readyState === 4 && xhr.status === 200) {
6 const data = JSON.parse(xhr.responseText);
7 console.log(data);
8 }
9};
10
11xhr.send();
- يرسل هذا الكود طلب
GET
إلى عنوان URL المحدد باستخدامXMLHttpRequest
، ويحلل الاستجابة كـ JSON، ويعرضها في وحدة التحكم.۔
مثال على طلب POST
عند إرسال البيانات إلى الخادم، حدد POST
في طريقة open
وأرسل البيانات باستخدام send
۔
1const xhr = new XMLHttpRequest();
2xhr.open('POST', 'https://jsonplaceholder.typicode.com/posts', true);
3xhr.setRequestHeader('Content-Type', 'application/json');
4
5const postData = JSON.stringify({
6 title: 'foo',
7 body: 'bar',
8 userId: 1
9});
10
11xhr.onreadystatechange = function () {
12 if (xhr.readyState === 4 && xhr.status === 201) {
13 console.log('Created post:', xhr.responseText);
14 }
15};
16
17xhr.send(postData);
- يرسل هذا الكود البيانات بصيغة JSON إلى الخادم باستخدام طلب
POST
عبرXMLHttpRequest
، ويعرض الاستجابة التي تحتوي على البيانات التي تم إنشاؤها في وحدة التحكم.۔
معالجة الأخطاء باستخدام XMLHttpRequest
يمكنك معالجة أخطاء الطلب باستخدام حدث onerror
۔
1const xhr = new XMLHttpRequest();
2xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts', true);
3
4xhr.onerror = function () {
5 console.error('Request failed');
6};
7
8xhr.onload = function () {
9 if (xhr.status === 200) {
10 console.log('Response:', xhr.responseText);
11 } else {
12 console.error('Error:', xhr.status);
13 }
14};
15
16xhr.send();
- ينفذ هذا الكود طلب
GET
باستخدامXMLHttpRequest
، ويتعامل مع أخطاء الطلب باستخدامonerror
، ويقوم بتسجيل الاستجابة بشكل مناسب في حالتي النجاح والفشل.۔
مقارنة بين Fetch API و XMLHttpRequest
الميزة | Fetch API | XMLHttpRequest |
---|---|---|
واجهة برمجة حديثة | ○ | × |
دعم الوعد (Promise) | ○ | × |
الوضوح | عالي (يعمل جيدًا مع async /await ) |
منخفض (العديد من ردود الاتصال) |
توافق المتصفحات | غير مدعوم في بعض المتصفحات القديمة | مدعوم من جميع المتصفحات الرئيسية |
تتبع التقدم | △ (ممكن مع ReadableStream ) |
○ (حدث onprogress متاح) |
معالجة الأخطاء | يتم التقاط الأخطاء في سلسلة الوعد | تحتاج إلى استخدام onerror |
الملخص
في TypeScript، يمكنك كتابة طلبات غير متزامنة بشكل مختصر وآمن نوعيًا باستخدام Fetch API
.۔ من ناحية أخرى، XMLHttpRequest
هو واجهة برمجة تطبيقات قديمة ولكن لا يزال من الممكن استخدامها في بعض الحالات.۔ بشكل عام، يُوصى باستخدام Fetch API
البسيط والحديث، ولكن إذا كانت هناك حاجة لتوافق المتصفحات أو تتبع التقدم، يمكن أيضًا التفكير في استخدام XMLHttpRequest
.۔
يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔