0

我遇到了一个问题。我正在尝试使用表单的 onsubmit='function();' 从表单发送获取请求 和阿贾克斯。

<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";
?>

发生的情况是,当我使用表单提交从函数内部进行调用时,我得到 status=0 错误。如果我删除该功能并让所有内容立即运行,它执行得很好。为什么是这样?我已经在谷歌上搜索了一段时间,找不到与我正在尝试做的事情相同的例子。我最终可能最终会使用 jQuery 的 ajax 函数,但我真的想避免仅仅为此而包含它。

编辑:好的,所以我能找到的是 XMLhttprequest status=0 表示存在 http 连接错误。所以也许我的网址有问题?我认为情况并非如此,因为我的结构如下所示:

root
    src
        admin_pass.php

我真的需要输入 http://localhost/src/admin_pass.php 吗?我之前在测试工作中使用过相对 url,这很好。

编辑:添加完整示例

固定的:

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

<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>
4

2 回答 2

0

出现错误时会出现状态 0。检查这个jsfiddle。将请求的 url 从/to更改为http://google.com,您将获得状态 0。

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

状态为 0 的小提琴就是这个

我想到的另一件事是,如果您使用localhost并且127.0.0.1应该尝试保持一致,因为浏览器不是。:) 因此,启动您的服务器127.0.0.1并确保使用包含127.0.0.1. 浏览器页面也应该指向相同的127.0.0.1

于 2013-05-17T18:42:55.403 回答
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>
于 2013-05-17T18:22:53.767 回答