我为一个小型ajax程序编写了以下代码。
我可以在IE 11上执行它,但不能在chrome和firefox上执行它

html文件:

<html>
<head><title>Ajax Page</title>
<script>
function ajax_handler(){
    try
    {
        var xmlhttp = new XMLHttpRequest();
    }catch(e1){
        try{
            var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e2){
            try{
                var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }catch(e3){
                alert('ajax not supported');
                return false;
            }
        }
    }
    var rollno = document.getElementById("roll").value;
    xmlhttp.onreadystatechange = getresult;
    var url = 'ajax.php?roll='+rollno;
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
}
function getresult(){
        if(xmlhttp.readyState==4 && xmlhttp.status==200){
            var sp = document.getElementById("result");
            sp.innerText=xmlhttp.responseText;
        }
    }
</script>
</head>

<body>
    Enter roll:<input type="text" id="roll" name="roll" /><br />
    <input type="button" name="submit" value="submit" onclick="ajax_handler()" /><br />
<span id="result"></span>
</body>
</html>


对应的PHP页面:

<?php
$roll = $_GET['roll'];
if($roll == 1001){
    echo 'passed';
}
?>


可以看出我的PHP程序没有发回任何东西
XML数据。它仅发送回文本。我在做什么错误?

最佳答案

在尝试代码后,我意识到它实际上可以在chrome上运行,但是问题出在getresult()函数上。内联定义onreadystatechange函数比在其他地方定义它更安全。该错误主要是onreadystatechange不了解xmlhttp对象的事实。这是代码。

    <html>
    <head><title>Ajax Page</title>
    <script>
    function ajax_handler(){
        try
        {
    var xmlhttp = new XMLHttpRequest();
    console.log('success');
}catch(e1){
    try{
        var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e2){
        try{
            var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e3){
            alert('ajax not supported');
            return false;
        }
    }
}
var rollno = document.getElementById("roll").value;
//function is defined inline rather than defining it elswhere and calling the function
xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState==4 && xmlhttp.status==200){
        var sp = document.getElementById("result");
        sp.innerText=xmlhttp.responseText;
    }
};
var url = 'test.php?roll='+rollno;
xmlhttp.open("GET",url,true);
xmlhttp.send();
    }
</script>
</head>

<body>
Enter roll:<input type="text" id="roll" name="roll" /><br />
<input type="button" name="submit" value="submit" onclick="ajax_handler()" /><br />
<span id="result"></span>
</body>
</html>

10-05 20:41
查看更多