0

我正在尝试在表单上使用AJAX ,以便用户不必离开当前页面来提交他们的姓名。当用户输入他们的名字时,我的功能就可以工作了;它会在他们打字时自动更改。我正在努力的是onClick提交名称。我没有收到来自 PHP 文件的任何响应,我也不知道为什么。这是我的代码:

表单页面:(提交函数通过 GET 请求通过全局变量发送名称)

<script type="text/javascript">

//Decalre the variables of name as Global variable
var name;

    //For IE 5 + 6
function httpReq(){
    if (window.XMLHttpRequest) { 
        // code for IE7+, Firefox, Chrome, Opera, Safari
        return xmlhttp=new XMLHttpRequest();
    } else { 
        // code for IE6, IE5
        return xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
}

function nameTest(str) {
    if (str.length==0) { 
        document.getElementById("nameTest").innerHTML="Please enter your name.";
        return;
    }
    httpReq();
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("nameTest").innerHTML=xmlhttp.responseText;
        }
    }   
    xmlhttp.open("GET","nameTest.php?q="+str,true);
    xmlhttp.send();
    return name = str;
}


// function to submit the users details to the database
function submit(str) {
    httpReq();
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("submitted").innerHTML=xmlhttp.responseText;
        }
    }   
    xmlhttp.open("GET","mailing-list.php?name="+name, true);
    xmlhttp.send();
}   
</script>

    Name: <input type="text" onkeyup="nameTest(this.value)">
    <span id="nameTest">Please enter your name.</span>
            <input style="width: 100px; height: 40px;" type="button" onclick="submit" value="Join!">
        <span id="submitted"></span>

没有给出响应的PHP页面(只是回显一些简单的东西,直到我得到响应):

<?php

$name = $_GET["name"];

echo "Hello There " + $name;

?>

似乎无法弄清楚为什么没有回应。任何帮助表示赞赏!

4

3 回答 3

1

根据 LightStyle,您应该使用 returnhttpReq()方法来检索您的 requestObject。

var xmlhttp = httpReq();
    xmlhttp.onreadystatechange=function() {...}

您必须修改 onclick="submit" intoonclick="submit();"才能调用它。

此 PHP 脚本将返回 0,连接运算符.在 PHP 中:

<?php
$name = $_GET["name"];
echo "Hello There " . $name;
?>
于 2013-05-13T13:49:32.137 回答
1
var name;

    //For IE 5 + 6
function httpReq(){
    if (window.XMLHttpRequest) { 
        // code for IE7+, Firefox, Chrome, Opera, Safari
        return new XMLHttpRequest();
    } else { 
        // code for IE6, IE5
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
}

function nameTest(str) {
    if (str.length==0) { 
        document.getElementById("nameTest").innerHTML="Please enter your name.";
        return;
    }
    var xmlhttp = httpReq();
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("nameTest").innerHTML=xmlhttp.responseText;
        }
    }   
    xmlhttp.open("GET","nameTest.php?name="+str,true);
    xmlhttp.send();
    window.name = str;
}


// function to submit the users details to the database
function submit() {
    var xmlhttp = httpReq();
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("submitted").innerHTML=xmlhttp.responseText;
        }
    }   
    xmlhttp.open("GET","mailing-list.php?name="+window.name, true);
    xmlhttp.send();
}

你还没有为 xmlhttp 赋值,可能控制台告诉你它是未定义的,你应该检查一下。抱歉,您的代码中有很多错误。我编辑了它,你现在应该试试。submit() 没有获取参数,它只是从之前由函数 nameTest(str) 设置的全局变量 name(window.name) 中获取名称。

最后一件事:你应该检查你想要的客户端和服务器端之间的兼容性。您在查询字符串中使用了“?q=”而不是“?name=”,请注意这些事项!

于 2013-05-13T13:30:26.680 回答
0

函数 submit(str) 中的值“名称”未知,因此为空。把它改成

xmlhttp.open("GET","mailing-list.php?name="+str, true);

并像这样调用你的函数:

submit("NameToShow");

顺便说一句:使用 jQuery 会让你更轻松。

于 2013-05-13T13:31:34.930 回答