Javascript HTML链接在AJAX发布后不起作用
背景:我正在开发一个小型web应用程序。AJAX将成功地将数据发布到操作(create.php),create.php将执行必要的mysql查询。AJAX完成后,我会在Javascript HTML链接在AJAX发布后不起作用,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,背景:我正在开发一个小型web应用程序。AJAX将成功地将数据发布到操作(create.php),create.php将执行必要的mysql查询。AJAX完成后,我会在div id=“container”>中添加一条消息,通知用户成功执行,然后清除内容“container”,以备将来使用;然而,问题就在这里 问题:执行AJAX后,我无法单击已加载到页面(page.php)上的任何HTML链接。我必须刷新网页,以便点击任何链接,并按照他们的目的地。发生这种情况的原因是什么?我如何修复它 AJAX不
div id=“container”>
中添加一条消息,通知用户成功执行,然后清除内容“container”,以备将来使用;然而,问题就在这里
问题:执行AJAX后,我无法单击已加载到页面(page.php)上的任何HTML链接。我必须刷新网页,以便点击任何链接,并按照他们的目的地。发生这种情况的原因是什么?我如何修复它
AJAX不需要返回结果。请求完成后,它只需要执行指定的jQuery代码。凭直觉,我修改了create.php以响应$\u POST数组,并让AJAX返回该数组。一旦AJAX将结果加载到“容器”中,我仍然无法单击page.php上加载的任何链接
回答:在AJAX调用导致引导下拉菜单无法正常工作后,没有重新加载DOM。每次调用后,必须手动重新初始化引导下拉类。这一点已经得到了详细的回答
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>
$(文档).ready(函数(){
$(“#添加#项”)。单击(函数(){
event.preventDefault();
$(“#content”).load(“form.php”);
});
});
函数create_item(){
var form_data=$(“#新项”).serialize();
var请求=$.ajax({
url:“create.php”,
类型:“POST”,
数据:表格数据,
});
request.done(函数(){
$(“#内容”).append(“用户添加成功”);
setTimeout(函数(){
$(“#内容”)。淡出(“缓慢”);
}, 5000);
setTimeout(函数(){
$(“#内容”).empty();
}, 8000);
});
请求失败(函数(jqXHR,textStatus){
警报(“请求失败:+textStatus”);
});
}
将内容淡出元素后,它将保持隐藏状态。下次调用AJAX函数时,它会将create.php
加载到一个不可见的元素中
尝试:
其他问题:
应该是
;您没有在脚本顶部包含jquery.js
;您没有将事件对象e
传递给单击处理程序
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>
$(文档).ready(函数(){
$(“#添加#项”)。单击(功能(e){
e、 预防默认值();
$(“#content”).load(“form.php”);
});
});
函数create_item(){
var form_data=$(“#新项”).serialize();
var请求=$.ajax({
url:“create.php”,
类型:“POST”,
数据:表格数据,
});
request.done(函数(){
$(“#内容”).append(“用户添加成功”);
setTimeout(函数(){
$(“#内容”).fadeOut(“慢”,函数(){
$(this.empty().show();
});
}, 5000);
});
请求失败(函数(jqXHR,textStatus){
警报(“请求失败:+textStatus”);
});
}
中的锚链接将自然地用新内容“刷新”页面
如果希望通过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>
在AJAX调用之后,没有重新加载DOM。每次调用后,必须手动重新初始化Boostrap下拉模块。详细回答如下:因为php文件中的onclick是在包含在它存在的dom中之前呈现的,因此它不会在单击时绑定到该函数。$(“#添加项”)。单击(function(){
应该是$(“#添加项”)。单击(function(e){
因此您可以将事件对象传递给e.preventDefault
以在@iam decoder上构建dom中创建的项目在创建dom后,您可以在jquery中查找on功能,我相信这取代了jquery live功能,因为它已被弃用。@iam decoder。单击()函数工作正常。这不是我的问题。onclick函数create_item()工作。AJAX完成后,
部分中的任何
链接在没有页面刷新的情况下都无法工作。
中只有一个链接我可以看到。其他链接是动态添加的吗?您的建议可以清除
;但是,它不能解决无法单击的问题de>并按照它的方向进行操作。目前,我完全无法重现您描述的问题。请按照我描述的方式修复代码,然后告诉我们您仍然存在的问题。否则,我将投票以“无法重现”结束此问题Jquery包含在内,但在页面的摘录中被省略。
是一个错误类型,现在正确显示“id”。我理解传递事件处理程序(e)向下,但你能详细说明这将如何影响与此无关的其他链接吗?不,我不能,因为我根本无法再现该问题。你需要向我们提供一个向我们显示错误的链接。感谢你的回复,但这不是关于手头问题的主题。问题不是如何使用AJAX加载内容。问题是一旦使用AJAX命令执行时,页面上的HTML链接不再可单击。例如,单击“添加新项目”表单加载。填写表单并单击按钮提交数据。AJAX完成并将消息附加到div容器。然后容器被清空。当我尝试导航到站点的另一部分时,链接不起作用。
<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>
$(function(){
$(".anchor").on('click', function(e){
e.preventDefault();
var $this=$(this);
$("#content").load($this.attr('href'));
});
});