البرمجة

تحسين استخدام Ajax والتعامل مع الوعود في JavaScript

في مقالنا اليوم، سنقوم بفحص الكود المقدم، الذي يبدو أنه يتعامل مع استدعاء Ajax لجلب بيانات المستخدمين من مصدر XML. يهدف الهدف النهائي إلى تحديد ما إذا كان المستخدم موجودًا أم لا، وتحقيق هذا الهدف يستند إلى قيمة user_found في ملف execute.js.

أولًا، دعونا نلقي نظرة على الكود في main.js. هناك وظيفة تسمى myFun، والتي تقوم بجلب بيانات المستخدمين باستخدام Ajax، وتحديد ما إذا كان المستخدم المستهدف (الذي يتم تحديده باسم my_user) موجودًا أم لا. القيمة المتعلقة بهذا الاكتشاف تخزن في user_found.

ومن ثم، يتم استدعاء myFun في execute.js، ويتم التحقق مباشرة بعد ذلك مما إذا كان المستخدم المستهدف موجودًا أم لا باستخدام if (user_found == true).

مع ذلك، هناك بعض النقاط التي يمكن تحسينها في الكود:

  1. استخدام الوعد Promise:
    يفضل تجنب استخدام async: false في الطلبات Ajax لأنه يمكن أن يؤدي إلى تجميد الواجهة الرسومية للمستخدم. يمكنك استخدام وعد Promise لتنظيم تسلسل الاتصال بالخادم بدلاً من الاعتماد على async: false.

  2. التحقق من نجاح الاستجابة:
    يفضل دائمًا التحقق من نجاح الاستجابة قبل معالجتها، حيث يمكن أن يتم التعامل مع أخطاء الشبكة أو الخادم بشكل مناسب.

  3. استخدام “===” بدلاً من “==”:
    في التعبير if (user_found == true)، يفضل استخدام === بدلاً من == للتحقق من التساوي الصارم وتجنب قضايا التحويل الضعيف.

  4. تقسيم الوظائف:
    يمكنك فصل وظائف الاستدعاء Ajax والتحقق من النتائج لتسهيل إدارة الشيفرة وجعلها أكثر قابلية للصيانة.

لنقم بتحسين الكود وتحسينه ليكون أكثر كفاءة وإفادة.

المزيد من المعلومات

بالطبع، سنواصل تحسين الكود وتوفير المزيد من المعلومات لضمان فهم أفضل للقارئ.

أولًا، دعونا نقم بتعديل الكود في main.js باستخدام Promises والتحقق من نجاح الاستجابة:

javascript
function myFun() { return new Promise((resolve, reject) => { var my_user = "Stas"; var itemsUrl = "myxmlwithusers"; var user_found = false; $.ajax({ url: itemsUrl, method: "GET", headers: { "Accept": "application/json; odata=verbose" }, cache: false, dataType: "text", success: function(data) { try { var jsonObject = JSON.parse(data); var results = jsonObject.d.results; results.forEach(user => { if (user.user === my_user) { user_found = true; } }); resolve(user_found); } catch (error) { reject(error); } }, error: function() { reject("Error fetching user data"); } }); }); }

ثم، في execute.js، يمكنك استخدام الوعد Promise المُرجع من myFun:

javascript
myFun() .then(user_found => { if (user_found) { console.log("User found!"); } else { console.log("User not found!"); } }) .catch(error => { console.error(error); });

هذا التحسين يساعد على جعل الكود أكثر تنظيمًا وفهمًا، حيث يتم التعامل مع نتائج استدعاء Ajax باستخدام Promises.

لتحسين القابلية للصيانة، يمكنك أيضًا فصل كل ملف إلى وحدات صغيرة وإضافة توثيق تشرح كل جزء من الكود لتسهيل فهم القارئ.

زر الذهاب إلى الأعلى