后台:我正在开发一个小型Web应用程序。 AJAX将成功将数据POST到操作(create.php),create.php将执行必要的mysql查询。完成AJAX后,我向div id="container"></div>
添加一条消息,通知用户成功执行,然后清除内容&#34; container&#34;供将来使用;然而,这就是问题所在。
问题:执行AJAX后,我无法点击已加载到页面上的任何HTML链接(page.php)。我必须刷新页面才能点击任何链接并按照它们到达目的地。是什么导致这种情况发生,我该如何解决?
AJAX不需要返回结果。它只需要在请求完成后执行指定的jQuery代码。在预感中,我改变了create.php来回显$ _POST数组并让AJAX返回结果。一旦AJAX将结果加载到&#34;容器&#34;我仍然无法点击page.php
上加载的任何链接答案: AJAX调用后没有重新加载DOM,导致引导程序下拉菜单无法正常运行。每次调用后都必须手动重新初始化bootstrap下拉类。这已经详细解答了here
create.php
<?php
if($_POST){
//run mysql query
}else{
//do nothing
}
?>
form.php的
<form id="new-items">
<input type="text" name="item" />
<input type="button" onclick="create_item()" name="Submit" value="Submit" />
</form>
page.php文件
<html>
<head>
<script>
$(document).ready(function(){
$("#add_items").click(function(){
event.preventDefault();
$("#content").load("form.php");
});
});
function create_item(){
var form_data = $("#new-items").serialize();
var request = $.ajax({
url: "create.php",
type: "POST",
data: form_data,
});
request.done(function(){
$("#content").append('<div>User was added successfully</div>');
setTimeout(function(){
$("#content").fadeOut("slow");
}, 5000);
setTimeout(function(){
$("#content").empty();
}, 8000);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
</script>
</head>
<body>
<nav>
<a href="link1.php">Link1</a>
<a href="link2.php">Link2</a>
<a href="#" id="add_items">Add New Items</a>
</nav>
<div id="content"></div>
</body>
</html>
答案 0 :(得分:0)
在fadeOut
#content
元素之后,它仍然是隐藏的。下次调用AJAX函数时,它会将create.php
加载到一个不可见的元素中。
尝试:
setTimeout(function(){
$("#content").fadeOut("slow", function() {
$(this).empty().show();
});
}, 5000);
其他问题:<div class="content">
应为<div id="content">
;您没有在脚本的顶部添加jquery.js
;您没有将事件对象e
传递给click
处理程序。
page.php
现在应该是这样的:
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script>
$(document).ready(function(){
$("#add_items").click(function(e){
e.preventDefault();
$("#content").load("form.php");
});
});
function create_item(){
var form_data = $("#new-items").serialize();
var request = $.ajax({
url: "create.php",
type: "POST",
data: form_data,
});
request.done(function(){
$("#content").append('<div>User was added successfully</div>');
setTimeout(function(){
$("#content").fadeOut("slow", function() {
$(this).empty().show();
});
}, 5000);
});
request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});
}
</script>
</head>
<body>
<nav><a href="#" id="add_items">Add New Items</a></nav>
<div id="content"></div>
</body>
</html>
答案 1 :(得分:0)
<nav>
中的锚链接将使用新内容自然“刷新”页面。
如果您想通过ajax请求加载内容,那么您应该尝试以下操作:
在链接中添加一个公共类
<nav>
<a href="link1.php" class="anchor">Link1</a>
<a href="link2.php" class="anchor">Link2</a>
<a href="form.php" class="anchor">Add New Items</a>
</nav>
然后将click
事件附加到每个链接,该链接使用e.preventDefault()
拦截默认页面刷新。您可以使用该链接的href
属性执行ajax请求。
$(function(){
$(".anchor").on('click', function(e){
e.preventDefault();
var $this=$(this);
$("#content").load($this.attr('href'));
});
});
答案 2 :(得分:-1)
AJAX调用后没有重新加载DOM。每次调用后都必须手动重新初始化Boostrap下拉模块。详细解答:answer