проблема с XMLHttpRequest - возвращение статуса 0 на локальном компьютере и работающем сервере - PullRequest
1 голос
/ 04 августа 2011

У меня проблемы с получением правильного XMLHttpRequest, я впервые использую ajax, поэтому я не уверен, правильно ли я форматирую все.Я просмотрел всю сеть и продолжаю находить в основном одну и ту же информацию и примеры, но некоторые элементы находятся в разных порядках, поэтому я не уверен, что это правильно, и я попробовал их все, и, похоже, ничего не работает.Вот мой код:

function ajaxRequest(){
    var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]
    if (window.XMLHttpRequest)
        return new XMLHttpRequest()
    else if (window.ActiveXObject){ 
        for (var i=0; i<activexmodes.length; i++){
            try{
                return new ActiveXObject(activexmodes[i])
            }
            catch(e){
                //suppress error
            }
        }
    }
    else
        return false
}
function getData(fileName){
    var fileLoc =encodeURI("assets/"+fileName+".html")
    alert(fileLoc)
    var request = new ajaxRequest()
    request.open("GET",fileLoc,true)
    var response = request.responseText
    alert(request.status)
    alert(response)
    request.send(null)
    return response
}
function home() {
    var data = getData("home")
    var contentDiv = document.getElementByClassName(content)
    contentDiv.innerHTML = data;
}

home срабатывает, когда пользователь нажимает на div на странице.я знаю, что к getData обращаются, потому что всплывают оповещения, однако я получаю код состояния 0, это произошло как на моей локальной машине, так и на живом сервере.Я читал, что localhosts может выдавать статус 0 независимо от фактического статуса, но это происходит и на живом сервере.если бы кто-то мог помочь мне решить эту проблему и / или уточнить правильный порядок событий в функции, я был бы очень признателен.

РЕДАКТИРОВАТЬ: новый код:

function getData(fileName){
    fileLoc = encodeURI("assets/"+fileName+".html")
    alert(fileLoc);
    request.onreadystatechange = processData;
    request.open("GET",fileLoc, false);
    request.send();
    alert(request.readyState);
    alert(response);
}
function processData(){
    if (request.readyState==4){
        if (request.status==200){
            document.getElementsByClassName('content').innerHTML = request.responseText;
        }
        else{
            alert("An error has occured making the request");
        }
    }
}

1 Ответ

1 голос
/ 04 августа 2011

Вы указываете XMLHTTPRequest отправлять запрос асинхронно, что означает, что остальная часть вашего сценария выполняется, пока вы ожидаете ответа.Вы получите код ответа 0 (неинициализированный) и пустой ответ, потому что в то время, когда вы возвращаетесь из функции, которая является текущим статусом и ответом.

Вместо этого вы хотите определить функцию, которая будет вызываться при состоянииизменения, или пусть XMLHTTPRequest работает синхронно.

Пожалуйста, обратитесь к этому руководству для простого примера, который должен вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...