Проблема с условным XMLHttpRequest XMLHttp.status == 200 - PullRequest
1 голос
/ 07 июня 2011

Мой Ajax работает просто отлично, пока я не добавлю свойство условного статуса.
Вот фрагмент

if (XMLHttp.readyState==4 && XMLHttp.status==200){
    // do something
}

и вот полный код

function getXMLHttp()
            {
             try
             {
              var xmlhttp = new XMLHttpRequest();
              // document.getElementById("Content").innerHTML="<h1>Using XMLHttpRequest Object</h1>";
              //alert('Mozilla XMLHttpRequest Obeject Created Successfully');
             }
             catch(err1)
             {
              var ieXmlHttpVersions = new Array();
              ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.7.0";
              ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.6.0";
              ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.5.0";
              ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.4.0";
              ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.3.0";
              ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp";
              ieXmlHttpVersions[ieXmlHttpVersions.length] = "Microsoft.XMLHttp";

              var i;
              for (i=0; i < ieXmlHttpVersions.length; i++)
              {
               try
               {
                var xmlhttp = new ActiveXObject(ieXmlHttpVersions[i]);
                // var catatan = "<h1>Using " + ieXmlHttpVersions[i] + "</h1>";
                break;
               }
               catch (err2)
               {
                var xmlhttp = null;
                //alert(ieXmlHttpVersions[i] + " not supported.");
               }
              }
             }

             if (typeof xmlhttp == "undefined" || xmlhttp == null){
              //document.getElementById("Content").innerHTML="<h1>XMLHttp cannot be created!</h1>";
              alert('XMLHttp Request Object Is not Supported Somehow');
              }
              return xmlhttp;
            }
            var XMLHttp = getXMLHttp();


            function loadData(url, targetID){
                if(!url) {var url="data.txt";}
                if(!targetID){var targetID='ajaxID';}
                XMLHttp.onreadystatechange = function (){getResponse(targetID)};
                XMLHttp.open('GET', url, true);
                XMLHttp.send(null);
            }
            function getResponse(targetID){
                var data = XMLHttp.responseText;
                var ajaxContent=document.getElementById('ajax_content');

                if(XMLHttp.readyState == 4){ 
                // This works Just fine, data from data.txt actually fetched
                // BUT When i Add this if statement with " && XMLHttp.status==200" It's not returning data from data.txt
                    if(data.length > 0){
                        fill(targetID,data);
                    }
                }
            }

            function fill(ID,data){
                hideLoading();
                document.getElementById(ID).innerHTML = data;
            }
            function showLoading(){
                document.getElementById('loading').style.visibility='';
                document.getElementById('loading_text').innerHTML = '....Loading Please Wait....';
            }
            function hideLoading(){
                document.getElementById('loading').style.visibility = 'hidden';
                document.getElementById('loading_text').innerHTML = '';
            }

У меня вопрос, почему яневозможно получить данные из data.txt, когда я добавляю оператор && XMLHttp.status==200?

Ответы [ 2 ]

0 голосов
/ 10 октября 2011

Я думаю, что проблема в создании объекта XMLHTTP. попробуйте использовать основной синтаксис, предоставленный w3schools.

            var xmlhttp;
    if (window.XMLHttpRequest)
    {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
    alert("Your browser does not support XMLHTTP!");
    }

его работа для меня или использовать jquery или прототип.

0 голосов
/ 07 июня 2011

Может ли ваш веб-сервер возвращать один из других кодов состояния "успеха" из спецификации HTTP * ?

Попробуйте проверить, если (XMLHttp.status >= 200 && XMLHttp.status < 300).

Можете ли вы сказать нам, знаете ли вы или не знаете, достигает ли поток выполнения строки fill(targetID,data)? Было бы очень необычно, если бы проверка XMLHttp.status вмешивалась в фактический шаг поиска данных.

Из того, что вы сказали нам, кажется, что XMLHttp.readyState должно достигать 4 без XMLHttp.status == 200. Я неправильно понял ваш вопрос?

...