Подтвердить что ты не робот

Ошибка XMLHttpRequest (Ajax)

У меня ошибка xmlhttprequest при работе с javascript. У меня есть XML файл, который я бы хотел разобрать и присвоить его содержимому на веб-странице. Я проделал свое исследование по этой части, и я не могу понять это.

<script = "text/javascript">
    window.onload = onPageLoad();
    var questionNum = 0;
    function onPageLoad(questionNum){

        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET","quiz.xml");

        try{
            xmlhttp.send(null);//here a xmlhttprequestexception number 101 is thrown 
        }catch(err){
            document.getElementById("body").innerHTML += "\nXMLHttprequest error: " + err.description;
        //this prints "XMLHttprequest error: undefined" in the body.
        }

        xmlDoc=xmlhttp.responseXML;
        parser=new DOMParser(); //this code is untested as it does not run this far.
    }
</script>

Мой XML файл прост и находится внутри одного и того же каталога.

<question>
    <query>what is 2+2?</query>
    <option>4</option>
    <option>5</option>
    <option>3</option>
    <answer>4</answer>
</question>

Я не могу понять, в чем моя проблема. Для справки я обычно программирую на С# или Java, и я использую google chrome.

4b9b3361

Ответ 1

Таким образом, здесь может быть несколько ошибок.

Сначала начните читать, как использовать XMLHttpRequest.open(), потому что есть третий необязательный параметр для указания, нужно ли делать асинхронный запрос, по умолчанию - true. Это означает, что вы делаете асинхронный запрос и вам нужно указать функцию обратного вызова, прежде чем вы выполните send(). Здесь пример из Mozilla Developer Network:

var oXHR = new XMLHttpRequest();

oXHR.open("GET", "http://www.mozilla.org/", true);

oXHR.onreadystatechange = function (oEvent) {  
    if (oXHR.readyState === 4) {  
        if (oXHR.status === 200) {  
          console.log(oXHR.responseText)  
        } else {  
           console.log("Error", oXHR.statusText);  
        }  
    }  
}; 

oXHR.send(null);  

Во-вторых, поскольку вы получаете ошибку 101, у вас может быть неправильный URL. Поэтому убедитесь, что URL-адрес, с которым выполняется запрос, правильный. Также убедитесь, что ваш сервер способен обслуживать ваш файл quiz.xml.

Вероятно, вам придется отлаживать, упрощая/сужаясь, где проблема. Поэтому я начал бы с простого синхронного запроса, чтобы вы не беспокоились о функции "функции обратного вызова". Итак, вот еще один пример из MDN для синхронного запроса:

var request = new XMLHttpRequest();  
request.open('GET', 'file:///home/user/file.json', false);   
request.send(null);  

if (request.status == 0)  
    console.log(request.responseText); 

Кроме того, если вы только начинаете с Javascript, вы можете обратиться к MDN для документации/примеров/руководств API Javascript.

Ответ 2

Я вижу две возможные проблемы:

Проблема 1

  • объект XMLHTTPRequest не завершил загрузку данных в то время, когда вы пытаетесь его использовать.

Решение: назначить функцию обратного вызова объектам "onreadystatechange" -event и обрабатывать данные в этой функции

xmlhttp.onreadystatechange = callbackFunctionName;

Как только состояние достигло DONE (4), содержимое ответа готово к чтению.

Проблема 2

  • объект XMLHTTPRequest не существует во всех браузерах (с помощью этого имени)

Решение:  Или используйте try-catch для создания правильного объекта для корректного браузера (ActiveXObject в IE) или используйте фреймворк, например jQuery ajax-method

Примечание. Если вы решили использовать jQuery ajax-метод, вы назначаете функцию обратного вызова с помощью jqXHR.done()

Ответ 3

Проблема, скорее всего, будет связана с линией

window.onload = onPageLoad();

Bby, включая скобки, которые вы говорите, должен быть равен возврату onpPageLoad(). Например:

/*Example function*/
function onPageLoad()
{
    return "science";
}
/*Set on load*/
window.onload = onPageLoad()

Если вы распечатаете значение window.onload на консоли, это будет наука.

Решение состоит в том, чтобы изменить линию на

window.onload = onPageLoad;

Наконец

Чтобы получить значение ответа, вам понадобится функция readystatechange для вашего объекта xmlHttp, например вместо

xmlDoc=xmlhttp.responseXML;
parser=new DOMParser(); //this code is untested as it does not run this far.

вы можете использовать

xmlHttp.onreadystatechange = function()
{
    if(this.readyState == 4){
        //Do your thing
    }
}