从函数调用xmlhttprequest open()和send()

时间:2013-05-17 18:17:05

标签: javascript ajax

我遇到了问题。我正在尝试使用表单的onsubmit ='function();'从表单发送get请求和ajax。

<html>
<head>
<script type='text/javascript'>
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function(){
        window.alert("readystate change: " + xmlhttp.readyState + " , " + xmlhttp.status); 
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            document.getElementById('adminPanel').innerHTML = xmlhttp.responseText;
        }
    }

    function submit_password(){
        xmlhttp.open("GET","./src/admin_pass.php");
        xmlhttp.send();         
    }
</script>
</head>
<body>
    <form onsubmit='submit_password();'>
        <input type='password' placeholder='PASSWORD'>
    </form>
    <div id='adminPanel'>
    </div>
</body>
</html>


<?php
    echo "test text";
?>

当我使用表单提交来自函数内的调用时,我得到状态= 0错误。如果我删除该函数并让所有内容立即运行它执行得很好。为什么是这样?我一直在谷歌搜索一段时间,并没有找到做我想做同样事情的例子。我最终可能会最终使用jQuery的ajax函数,但我真的想避免将它包含在内。

编辑:好的,所以我能够找到的是XMLhttprequest status = 0表示存在http连接错误。所以我的网址可能有问题吗?我不认为是这种情况,因为我的结构看起来像这样:

root
    src
        admin_pass.php

我真的需要把http:// localhost / src / admin_pass.php?我以前在测试工作中使用过相对网址,很好。

编辑:添加完整示例

固定:

老实说,我不知道为什么要解决这个问题。我从一些回复中得知,问题可能在于使用表单。我认为这是不必要的。

<html>
<head>
    <title>Admin Page</title>

<script type='text/javascript'>     
    function submit_password(){
        var xmlhttp = new XMLHttpRequest();

        xmlhttp.onreadystatechange = function(){
            window.alert("readystate change: " + xmlhttp.readyState + " , " + xmlhttp.status); 
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
                document.getElementById('adminPanel').innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET","./src/admin_pass.php",true);
        xmlhttp.send();         
    }
    function check_enter(e){
        if(e.keyCode == 13){
            submit_password();
        }
    }
</script>
</head>
<body>
<input id='password' type='password' placeholder='PASSWORD PLEASE' onkeyup='check_enter(event);'>

<div id='adminPanel'> 
</div>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

不要将其声明为全球。 请尝试使用上面的代码。

<script type='text/javascript'>
function submit_password(){
var xmlhttp = new XMLHttpRequest();
     xmlhttp.onreadystatechange = function(){
     window.alert("readystate change: " + xmlhttp.readyState + " , " + xmlhttp.status); 
     if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
        document.getElementById('adminPanel').innerHTML = xmlhttp.responseText;
     }
   }
    xmlhttp.open("GET","./src/admin_pass.php");
    xmlhttp.send();         
}
</script>

答案 1 :(得分:0)

出现错误时会显示状态0。检查此jsfiddle。将请求的网址从/更改为http://google.com,您将获得状态0。

您确定要尝试在同一个域上发出请求吗? (我看到你在上面的例子中做了,但是为了确保你没有给出一个与你实际使用的不同的例子)。

状态0的小提琴是this one

我想到的另一件事是,如果你使用localhost127.0.0.1,你应该尝试保持一致,因为浏览器不是。 :)因此,请在127.0.0.1上启动您的服务器,并确保使用包含127.0.0.1的绝对网址进行测试。此外,浏览器页面应指向相同的127.0.0.1