Javascript - Ошибка XMLHttpRequest в Internet Explorer - PullRequest
1 голос
/ 28 февраля 2012

* решено * Ответ в отдельном посте ниже

Этот код отлично работает в FireFox, но не работает в Internet Explorer 8. Он выдает ошибку «Отказано в доступе. Что-то мне не хватает?

function loadXMLDoc(dname){
    if (window.XMLHttpRequest){
        var xhttp=new XMLHttpRequest();
    }
    else{
        var xhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET", dname,false);
    xhttp.send();
    return xhttp.responseXML;
}
var xmlDoc=loadXMLDoc("notSchema.xml");
var x=xmlDoc.getElementsByTagName('ROOT_NODE_ID');

Он не любит .open () и .send ()

Edited ...

var x;

function loadXMLDoc(dname){
var request = $.ajax({
    url: dname,
    type: "GET",
    async: false,
    data: {},
    success: function(http){
        xmlDoc = http;
        alert(http);
        x=http.getElementsByTagName("ROOT_NODE_ID");
    },
    error: function(html){
        alert('failure: ' + html);
    }       
});

}

loadXMLDoc("notSchema.xml");

for (var i=0;i<x.length;i++)
{

if(x[i].childNodes[0] == undefined) {
    treeArray[count]="null";
    count++;
}else{
    //return ROOT_NODE_ID

    treeArray[count]=x[i].childNodes[0].nodeValue;
    count++;
}
}

Редактировал Код еще раз. Я пытаюсь загрузить XML, разобрать тег «ROOT_NODE_ID», затем получить это значение и сохранить его в массиве

Когда я запускаю этот код в Firefox, он возвращает 51, что является числом тегов ROOT_NODE_ID и заполняет дерево, которое я создаю. Когда я запускаю тот же самый точный код в IE8, он даже не предупреждает.

Я в тупике.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Я понял это.Как я уже говорил ранее, если вы запускаете код выше в Firefox, он возвращает «объект», а если вы запускаете его в IE8, он возвращает содержимое объекта.Я решил эту проблему, снова загрузив содержимое объекта в IE8, превратив содержимое объекта обратно в объект, который будет готов для анализа.Если это имеет какой-то смысл.

Просто чтобы разъяснить людям, которые только посещают эту ветку.Когда я позвонил «оповещение (http);»в Firefox он будет возвращать «[object XMLDocument]», но в IE8 он будет возвращать фактическое содержимое «[object XMLDocument]».

var treeArray=new Array();
var count = 0;
var x;

function loadXMLDoc(dname){
var request = $.ajax({
    url: dname,
    type: "GET",
    async: false,
    data: {},
    success: function(http){
        var xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
        //Loading the contents of the object 'http' a second time, which turns it into an object again. 
        xmlDocument.loadXML(http);
        x = xmlDocument.getElementsByTagName("ROOT_NODE_ID");
        alert(x.length);
    },
    error: function(html){
        alert('failure: ' + html);
    }       
});

}

loadXMLDoc("notSchema.xml");

for (var i=0;i<x.length;i++)
{

if(x[i].childNodes[0] == undefined) {
    treeArray[count]="null";
    count++;
}else{
    //return ROOT_NODE_ID

    treeArray[count]=x[i].childNodes[0].nodeValue;
    count++;
}
}
0 голосов
/ 28 февраля 2012

Зак,

Вы можете использовать jquery для вызова ajax - jquery будет делать все правильно за кулисами.

В вашем случае здесь:

function loadXMLDoc(dname){
var request = $.ajax({
    url: dname,
    type: "GET",
    async: false,
    data: {},
    success: function(html){

          var x=xmlDoc.getElementsByTagName('ROOT_NODE_ID');    

    },
    error: function(html){
        alert('failure: ' + html);
    }   
});

}

...