gpt4 book ai didi

node.js - ajax调用更新jade部分模板

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:17 25 4
gpt4 key购买 nike

当我使用部分 Jade 模板更新 div 内容时遇到问题。第一个删除用户的 ajax 调用工作正常,div 内容已更新,但是当我再次单击删除其他用户时,不会调用 ajax 操作。我看不出问题出在哪里。

这是我的代码

view/layout.jade

doctype html
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
.container
block content
block footer
script(type='text/javascript' src='/javascripts/jquery.min.js')
script(type='text/javascript' src='/javascripts/functions.js')

view/index.jade

extends layout

block content
include menu.jade
#users_list
include users.jade

view/users.jade

table
thead
tr
th Id
th Name
th Description
th(colspan='2') Actions
tbody
if(users)
each user in users
tr
td #{user.id}
td
a(id=user.id href='#') #{user.name}
td
a(id=user.id href='#') #{user.description}
td
a(class='user_edit' id=user.id href='#' )
img(id=user.id src="images/edit.png")
td
a(class='user_delete' id=user.id href='#')
img(id=user.name src="images/trash.png")

routes/index.js

router.get('/deleteUser/:userid', function (req, res) {

UserModel.deleteUser({userid: req.params.userid}, function(error, data){
res.render('users', {
users : data
});
});
});

javascripts/functions.js

  $(document).ready(function(){
//others functions and variables here!!!!!

$('.user_delete').on('click', function(e) {
e.preventDefault();
var userid = $(this).attr('id');
$.ajax({
method: 'GET',
url: baseurl + 'deleteUser/'+userid,
dataType: 'html',
success: function(data){
$('#users_list').html(data);
},
});
});
}

谢谢

最佳答案

原因是您将事件处理程序绑定(bind)到网页中已呈现的元素。当您单击删除并触发事件处理程序时,所有这些元素都会从页面中删除并替换为新内容,位于:

success: function(data){
$('#users_list').html(data);
},

最简单的解决方案是将事件处理程序绑定(bind)到您知道仍会出现在页面上的元素,并使用 onselector 参数来过滤您想要绑定(bind)的元素。该事件处理程序将绑定(bind)到您永远不会从页面中删除的父元素。当您单击删除链接时,事件将冒泡到该元素,并且由于它与选择器匹配,因此将触发该事件。例如:

$('.container').on('click', '.user_delete', function(e) {
// as before...
}

作为一个额外的好处,这在浏览器中可能会稍微提高性能,因为您只将一个事件处理程序绑定(bind)到一个元素,而不是许多(我不太确定最近版本的 jQuery 中的这一点,但我认为它仍然成立)。

也就是说,您绝对希望在 GET 请求中执行破坏性操作。这是一种肯定会破坏数据的方式。 GET 用于获取数据,并且对于同一请求始终获取相同的数据。为此使用 POST 请求,或者更好的是使用 DELETE 请求。

关于node.js - ajax调用更新jade部分模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com