首先,這是我的AJAX代碼:按鈕標籤的表單屬性會導致頁面重新加載?
<script>
function ajaxInsert() {
var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("select").innerHTML = xmlhttp.responseText
}
}
var user = document.getElementById("user").value
var pwd = document.getElementById("pwd").value
var email = document.getElementById("email").value
var str = "user=" + user + "&pwd=" + pwd + "&email=" + email
// document.write(str)
xmlhttp.open("post", "getconnectforxmlhttp.php", true)
xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded")
xmlhttp.send(str)
}
,然後,我的形式:
<form method="post" id="insertform">
<label for="user">用戶名</label><input type="text" id="user" name="user">
<label for="pwd">密碼</label><input type="password" id="pwd" name="pwd">
<label for="email">郵箱</label><input type="email" id="email" name="email">
</form>
<button form="insertform" onclick="ajaxInsert()">提交</button>
<div id="select"></div>
和最後,在getconnectforxmlhttp.php文件我的PHP代碼:
<?php
$pdo = new PDO("mysql:host=localhost; dbname=db_test", "root", "");
if (isset($_POST)) {
$values = "'".implode("', '", array_values($_POST))."'";
}
$str = "";
try {
$resp = $pdo->prepare("INSERT INTO user (user, pwd, email) VALUES ($values)");
$resp->execute();
} catch (Exception $e) {
$str .= "Error".$e->getMessage()."<br>";
}
if ($pdo->lastInsertId()) {
try {
$res = $pdo->prepare("SELECT * FROM user");
$res->execute();
} catch (Exception $e) {
$str .= "Error".$e->getMessage()."<br>";
}
$result = $res->fetchAll(PDO::FETCH_ASSOC);
for ($i=0; $i < count($result); ++$i) {
$str .= $result[$i]["id"]." ".$result[$i]["user"]." "
.$result[$i]["pwd"]." ".$result[$i]["email"]."<br>";
}
echo $str;
} else {
$str .= "插入失敗";
echo $str;
}
?>
它所做的是在本地數據庫的表用戶中插入一個新行,然後在div標籤之間顯示它們。但是,當我運行此代碼時,insert語句成功,並且結果div標籤)顯示第二個,是的,它顯示,但奇怪的是,然後它消失了,現在我知道如何做到這一點,只需刪除開始按鈕標籤中的表單屬性,並更改ID的值div標籤成別的東西,如:
<button onclick="ajaxInsert()">提交</button>
<div id="sel"></div>
也改變AJAX代碼有點像document.getElementById("sel").innerHTML = xmlhttp.responseText
,但有一個小問題:我不知道發生了什麼,什麼是我首先寫形式的問題,這些變化解決了什麼問題?
這是一個不清楚的問題。你在問很多事情。你的問題有什麼作用? –
@CharlieWalton我認爲我在下面描述的代碼,發生了一些事情,這是按鈕的形式屬性責怪,但我不知道爲什麼,所以我問 –