ما هو المطلوب لأياكس أكثر من هذه الوظيفة

StackOverflow https://stackoverflow.com/questions/34486

  •  09-06-2019
  •  | 
  •  

سؤال

لدي وظيفة JS صغيرة تعمل مع Ajax بالنسبة لي ووظيفة أخرى مثلها تضيف بيانات POST إلى الطلب.نظرًا لكون Ajax موضوعًا كبيرًا مع وجود العديد من المكتبات حوله، ما الذي أفتقده من وظيفتي، هل هي غير آمنة أو شيء آخر مثير للقلق؟

function loadPage(pagePath, displayElement)
{
    var xmlHttp;

    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }

    xmlHttp.onreadystatechange=function()
    {
        if(xmlHttp.readyState==4)
        {
            document.getElementById(displayElement).innerHTML = xmlHttp.responseText;
        }
    }

    xmlHttp.open("GET", pagePath, true);
    xmlHttp.send(null);
}
هل كانت مفيدة؟

المحلول

أنصحك بشدة بعدم إنشاء كود Ajax الخاص بك.بدلاً من ذلك، استخدم إطار عمل مثل Prototype أو Dojo أو أي إطار آخر.لقد اهتموا بالتعامل مع جميع حالات ReadyStates التي لا تتعامل معها (2 تعني أنه تم إرسالها، 3 تعني أنها قيد المعالجة، وما إلى ذلك)، ويجب عليهم الهروب من الرد الذي تتلقاه حتى لا تقوم بإدراج معلومات قد تكون غير آمنة جافا سكريبت أو أي شيء في صفحتك.

شيء آخر سيوفره لك إطار العمل الأكثر قوة هو القدرة على القيام بأكثر من مجرد استخدام InternalHTML لاستبدال العناصر في DOM.لا يمكن استخدام وظيفتك هنا إلا لاستبدال عنصر واحد بالاستجابة من مكالمة ajax.هناك الكثير الذي يمكنك فعله مع Ajax.

نصائح أخرى

وأود أن إزالة هذا الخط.

alert("Your browser does not support AJAX!")

الصراخ على المستخدم بلغة ربما لا يفهمها هو أسوأ من الفشل.:-)

لم أكن أبدًا من محبي كتل المحاولة/الالتقاط المتداخلة، لذا سأفعل ذلك بطريقة مثل:

var xmlHttp;
if (window.XMLHttpRequest) {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
} else if (window.ActiveXObject) {
  try {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
}

if (xmlHttp) {
  // No errors, do whatever you need.
}

أعتقد أن هذا سوف ينجح.ولكن كما ذكرنا من قبل - لماذا نعيد اختراع العجلة، نستخدم المكتبة.والأفضل من ذلك - اكتشف كيف يفعلون ذلك.

من المحتمل أن تكون jQuery واحدة من أخف المكتبات الشائعة المتوفرة.

نفس الشيء في النموذج الأولي:

function loadPage(pagePath, displayElement) {
    new Ajax.Updater(displayElement, pagePath);
}

Ajax.Updater في واجهة برمجة تطبيقات النموذج الأولي

إذا كنت تريد حقًا رؤية ما تفتقده، فاقرأ كود مصدر jQuery أو Prototype لإجراءات أجاكس الخاصة بهم.إذا كانت هناك أرقام أخطاء في التعليقات، فابحث عنها أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top