如何ajax POST到PHP

inc*_*ce' 5 javascript php ajax

我似乎无法弄清楚如何使用ajax发布.我做了一个愚蠢的形式来尝试它,甚至在将它一直削减到只有两个值之后,仍然无法获得任何工作.我的HTML是这样的:

<html>
<head>
<script type="text/javascript" src="j.js"></script>
<title>Test this<
<body>/title>
</head>
<form name="testForm" onsubmit="postStuff()" method="post">
First Name: <input type="text" name="fname" id="fname" /><br />
Last Name: <input type="text" name="lname" id="lname" /><br />
<input type="submit" value="Submit Form" />
</form>
<div id="status"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后,到目前为止,我的外部JavaScript只是一个函数:

function postStuff(){
// Create our XMLHttpRequest object
var hr = new XMLHttpRequest();
// Create some variables we need to send to our PHP file
var url = "processForm.php";
var fn = document.getElementById("fname").value;
var ln = document.getElementById("lname").value;
var vars = "firstname="+fn+"&lastname="+ln;
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
    if(hr.readyState == 4 && hr.status == 200) {
        var return_data = hr.responseText;
        document.getElementById("status").innerHTML = return_data;
    }
}
// Send the data to PHP now... and wait for response to update the status div
hr.send(vars); // Actually execute the request
document.getElementById("status").innerHTML = "processing...";
}
Run Code Online (Sandbox Code Playgroud)

虽然我的PHP只是回复了这些东西:

<?php
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
echo $firstname ." - ". $lastname ."<br />";
?>
Run Code Online (Sandbox Code Playgroud)

我找不到任何错误在Firebug或Chrome的toolsy一样的东西.可任何人谁我什么,我做错了吗?

dav*_*rad 6

整个问题是由于您提交表单执行AJAX调用而引起的!status肯定会更新,但在同一时刻刷新页面(注意 - 值<input>消失)

只需通过更改标记来避免提交表单,

<form name="testForm" action="" method="">
First Name: <input type="text" name="fname" id="fname" /><br />
Last Name: <input type="text" name="lname" id="lname" /><br />
<input type="button" value="Submit Form" onclick="postStuff();" />
Run Code Online (Sandbox Code Playgroud)

并且您的代码有效.或者根本不使用表格.无论如何,当你使用AJAX时都没用.


更新

在回答之前我复制了整个场景:

xhr.html

<html>
<head>
<title>Test this</title>
</head>
<body>
<form name="testForm" action="" method="">
First Name: <input type="text" name="fname" id="fname" /><br />
Last Name: <input type="text" name="lname" id="lname" /><br />
<input type="button" value="Submit Form" onclick="postStuff();" />
</form>
<div id="status"></div>

<script>
function postStuff(){
// Create our XMLHttpRequest object
var hr = new XMLHttpRequest();
// Create some variables we need to send to our PHP file
var url = "xhr.php";
var fn = document.getElementById("fname").value;
var ln = document.getElementById("lname").value;
var vars = "firstname="+fn+"&lastname="+ln;
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// Access the onreadystatechange event for the XMLHttpRequest object
hr.onreadystatechange = function() {
    console.log(hr);

    if(hr.readyState == 4 && hr.status == 200) {
        var return_data = hr.responseText;
        document.getElementById("status").innerHTML = return_data;
    }
}
// Send the data to PHP now... and wait for response to update the status div
hr.send(vars); // Actually execute the request
document.getElementById("status").innerHTML = "processing...";
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

xhr.php

<?php
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
echo $firstname ." - ". $lastname ."<br />";
?>
Run Code Online (Sandbox Code Playgroud)


小智 3

制作:

<form name="testForm" onsubmit="postStuff()" method="post">
First Name: <input type="text" name="fname" id="fname" /> <br />
Last Name: <input type="text" name="lname" id="lname" /> <br />
<input type="submit" value="Submit Form" />
</form>
Run Code Online (Sandbox Code Playgroud)

进入按钮标签:

<form name="testForm">
First Name: <input type="text" name="fname" id="fname" /> <br />
Last Name: <input type="text" name="lname" id="lname" /> <br />
<button type="button" onclick="postStuff();">Submit Form!</button>
</form>
Run Code Online (Sandbox Code Playgroud)

据我所知,页面从表单提交刷新。如果您使用 ajax,则不需要使用表单。

另请阅读:为什么在 HTML 中使用 onClick() 是一种不好的做法?因为无论如何你都将帖子包含在函数中。

编辑:我刚刚注意到您的标题和头部标签在您发布的源中已损坏。