أياكس لن تحصل على الاستعداد الماضي 1، لماذا؟

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

  •  09-09-2019
  •  | 
  •  

سؤال

أحاول الحصول على هذه الوظيفة للعمل، والتي يقوم بطلب المعلمة url ثم يرسل المسؤولية إلى callback وهي وظيفة.

يبدو أنه يحصل فقط على readyState 1 (بفضل أوامر Firebug).

ها هو:

function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
    return false;
}
httpRequest.onreadystatechange = function(){
    console.log(httpRequest.readyState);
    if (httpRequest.readyState == 4) {
        callback(httpRequest.responseText);
    }
};
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
هل كانت مفيدة؟

المحلول

جددت هذه المشكلة في تعيين حدث تحميل بدلا من OnreadyStatechange:

function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
        return false;
}

var readyStateChange = function(){
    console.log(httpRequest.readyState);

    if (httpRequest.readyState == 4) {
                callback(httpRequest.responseText);
    }
};


if (isFirefox && firefoxVersion > 3) {
    httpRequest.onload = readyStateChange;
} else {
    httpRequest.onreadystatechange = readyStateChange;
}

console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}

نصائح أخرى

تحقق من أن عنوان URL المعني يستجيب فعليا عن طريق زيارة ذلك مباشرة في المتصفح.

اختبار مع متصفح مختلف هل تحصل على نفس النتيجة.

استخدم بعض أشكال مراقب HTTP لمشاهدة العميل إلى محادثة الخادم (المفضل لدي العابث)

ربما لا يرجع طلب AJAX البيانات (لذلك، خطأ جانب الخادم من نوع ما). حاول تمكين الخيار "إظهار XMLHTPREQUESS" في وحدة التحكم Firebug، للتحقق من ذلك.

واجهت أيضا نفس المشكلة. من خلال قراءة عنوان URL أدناه، حصلت على حل الألغام.

http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall.

في الأساس، عندما أقوم بتعيين وظيفتي كممسكو حدث ل HTTPREQUEEST.ONREADYSTATECHANGE، لا يمكنني تمرير أي متغير لذلك. بحيث لا بد لي من تضمين المتغير داخل سلسلة منشور HTTP إلى الخادم الخلفي ثم احصل عليه من استجابة HTTP.

إنه يعمل بشكل جيد ل FF 3. لا حاجة لاستخدام JQuery.

كان لدي نفس المشكلة على فايرفوكس ولكن ليس على الكروم.

كانت المشكلة كانت إجابتي تم تعيينها من نوع MIME "التطبيق / Octet-Stream".

تغييره إلى "النص / HTML" جعلته يعمل على فايرفوكس أيضا.

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