我对ajax很新,所以我跟着tutorial但是我无法让它工作。我试着在这个论坛上搜索答案,但没有运气..
HTML (有点从类和引导程序中删除)
<form id="editUserForm" role="form">
<input id="edit_employeenr" type="text" name="employeenr">
<input id="edit_name" type="text" name="name">
<select id="edit_membertype" name="membertype">
<option value="1">Admin</option>
<option value="2">Employee</option>
</select>
<input type="submit" value="Save">
</form>
<div id="editUserMsg">Successfully updated!</div>
JS
$(document).ready(function() {
$("#editUserMsg").hide();
$("#editUserForm").submit(function(event) {
event.preventDefault();
submitUserEdit();
});
function submitUserEdit(){
var dataString = $("#editUserForm").serialize();
$.ajax({
type: "POST",
url: "user_edit_process.php",
data: dataString,
success: function(text){
if (text == "success"){
userEditSuccess();
}
}
});
}
function userEditSuccess(){
$("#editUserMsg").show().delay(5000).fadeOut();
}
});
PHP (user_edit_process.php)
<?php
$employeenr = $_POST['employeenr'];
$name = $_POST['name'];
$membertype = $_POST['membertype'];
$stmt = $link->prepare("UPDATE users SET employeenr = ?, name = ?, membertype = ?");
$stmt->bind_param("isi", $employeenr, $name, $membertype);
$stmt->execute();
if ($stmt) {
echo 'success';
} else {
echo 'fail';
}
?>
如果我将$("#editUserMsg").show().dealy(5000).fadeOut();
放在$.ajax
正上方,则会显示消息,因此必须表示ajax代码无法正常工作。有什么建议吗?
编辑已解决。我忘了将文件包含在变量$link
定义的文件中。
答案 0 :(得分:1)
你在 user_edit_process.php 中拥有的所有代码是什么?
$link
变量是否正确初始化?
您可以尝试在PHP文件中注释部分代码,并编写类似下面的内容来测试Ajax代码是否正常工作:
<?php
$employeenr = $_POST['employeenr'];
$name = $_POST['name'];
$membertype = $_POST['membertype'];
// $stmt = $link->prepare("UPDATE users SET employeenr = ?, name = ?, membertype = ?");
// $stmt->bind_param("isi", $employeenr, $name, $membertype);
// $stmt->execute();
if ($employeenr) {
echo 'success';
} else {
echo 'fail';
}
然后,如果您在第一个employeenr
表单输入中输入内容,则应显示已成功更新!。如果您将此输入留空并发送表单,则不应显示。
答案 1 :(得分:1)
您的准备语句或bind_parameter中似乎存在问题。你应该总是检查错误,所以我建议你这样做以检查错误:
<?php
$employeenr = $_POST['employeenr'];
$name = $_POST['name'];
$membertype = $_POST['membertype'];
if (!($stmt = $mysqli->prepare("UPDATE users SET employeenr = ?, name = ?, membertype = ?"))) {
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (! $stmt->bind_param("isi", $employeenr, $name, $membertype)) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
?>
然后在你的JS中,将其添加到你的成功方法中:
console.log(text);
检查您的Firefox控制台(Ctrl-Shift-Q),如果有错误,您可以在“网络”下找到它 - &gt;单击列表中的“user_edit_process.php” - &gt;并在“预览”下的右侧窗口中。