XMLHttpRequest问题 - 在本地计算机和实时服务器上返回0状态

时间:2011-08-03 21:57:29

标签: javascript ajax xmlhttprequest

我无法让这个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;
}
当用户点击页面中的div时,会触发

home。我知道正在访问getData因为警报弹出,但是我得到状态代码0,这发生在我的本地机器和实时服务器上。我读到无论实际状态如何,localhost都可以抛出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 个答案:

答案 0 :(得分:1)

您正在告诉XMLHTTPRequest以异步方式发送请求,这意味着您等待响应时会执行其余脚本。您将获得响应代码0(未初始化)和空响应,因为当您从当前状态和响应的函数返回时。

相反,您希望定义在状态更改时调用的函数,或者让XMLHTTPRequest同步工作。

请参阅this tutorial以获取一个可以帮助您的简单示例。