javascript - 我按两次提交后,Ajax 工作
问题描述
非常简短,这是我在myPage.php中的 php 代码:
<div class="table-responsive" id="items">
<table class="table" id="myTable">
<thead><tr><th>item<th>status<th>options</thead>
<tbody>
[...]
echo "<tr><td>$item<td>$status<td>to-be-added
[...]
echo "<tr><td colspan='3'>";
echo "<form method='post' id='newitem'>";
echo "<input type='hidden' id='uid' name='uid' value='$uid'>";
echo "<div><button type='submit' class='btn btn-info' id='submitbtn'>new item</button></div>";
echo "</form>";
[...]
这是我的.js文件 ajax 代码:
$(document).ready(function () {
$('form').submit(function (event) {
$('#errors').remove(); // remove the error text
$('#success').remove(); // remove the success text
var formData = $("#newitem").serialize();
$.ajax({
type: 'POST',
url: 'process.php',
data: formData,
dataType: 'json',
encode: true
})
.done(function (data) {
console.log(data);
if (!data.success) {
$('form').append('<div id="errors" class="alert alert-warning"></div>');
if (data.errors.validitem) {
$('#errors').append('<p>' + data.errors.validitem + '</p>');
}
} else {
$('#addresses').append('<div id="success" class="alert alert-success">' + data.message + '</div>');
$("#myTable").load("mypage.php #myTable");
}
})
.fail(function (data) {
console.log(data);
});
event.preventDefault();
});
});
我不显示 process.php 函数,因为这很可能不是问题。
- 当我第一次加载页面并按下提交时,会发生以下事情:
- 通过 ajax 创建一个新项目
- 表被填充了新条目而不刷新页面,但使用了加载选项:
*$("#myTable").load("mypage.php #myTable");*
- 总之,一切都按预期工作!
注意:只有在我添加表加载后才会出现问题。$("#myTable").load("mypage.php #myTable");
提交后没有重新加载表格,提交总是有效,只是表格没有显示实时更改,我需要执行 F5 ......这不是计划。
加载表格后,当我再次按下按钮时,似乎什么也没发生,除了我的成功消息消失了。
在这个阶段,我需要按两次按钮。只有在我第二次按下提交后,ajax 才能正常执行,并且表格会显示创建的新项目。对于所有下一次提交,此行为是一致的。所有仅在第二次提交后执行。
我需要一些帮助。怎么了?
我只想重新加载 myPage.php 的一部分,所以只有完整的表#myTable 或整个 div #items,以及我在 myPage.php 中拥有的所有验证功能,我不想在此过程中重新创建完整的表。 php 并通过 POST 发送,因为我在其他论坛上看到了一些推荐。
解决方案
问题在这里:$("#myTable").load("mypage.php #myTable");
mypage.php
是您的主页。你加载一次。然后,在表格内部,您使用它.load()
来覆盖它。这不好。
然后,您有一个全新的表,其中没有处理程序绑定到提交按钮。因此,在提交按钮单击(第二次)时,使用<form>
元素的“正常行为”提交表单......并且页面完全重新加载。
作为一种可能的解决方案,我会.load()
在form
... Not the上使用table
,如下所示:
$("#newitem").load("mypage.php #newitem");
但是您应该尝试$("#newitem").reset()
删除#error
and #success
... 而不是.load()
.
编辑
第二次:
尝试$(document).on("submit", "form", function (event) {
代替$('form').submit(function (event) {
那是委托......所以你的提交按钮总是会绑定到函数上,即使它被覆盖了。
推荐阅读
- css - 设置 div 相对于屏幕尺寸的最小、最大和默认高度
- locking - Dbeaver 表锁定
- jquery - Jquery FullCalendar API
- sql-server - 在 SSIS Salesforce 集成工具包连接器中动态决定 salesforce 对象名称和字段
- javascript - 使用 tablesorter 对 TR 块进行排序
- sql - Oracle UPDATE 语句性能
- hyperledger-fabric - Hyperledger Fabric NodeJS 链码教程
- android - 导航抽屉中的登录会话,如 Play 商店
- c# - ShutDownListener 中的 TaskCanceledException
- javascript - 在仅使用 javascript 或 jquery 的移动浏览器中准备好键盘时出现?