【问题标题】:How to render part of ejs template with jquery after ajax call on expressjs如何在expressjs上的ajax调用后用jquery渲染部分ejs模板
【发布时间】:2013-09-26 12:14:42
【问题描述】:

在 jquery ajax 调用之后,我无法找出如何在 ejs 上创建部分 DOM。该功能是一个非常有效的实时搜索,它将请求发送到服务器,它搜索数据库并返回一个包含基于搜索的用户列表的变量。问题从那里开始,因为 EJS 不再允许部分,并且在 html 上嵌入 javascript 的方式在 jquery 上不起作用,或者至少我不知道如何。我的心被卡住了,所以非常感谢任何帮助。

这是 Ajax 调用

$.ajax({
    url: 'http://localhost:3000/contactsearch',
    type: 'post',
    dataType: 'text',
    data: { searchquery: searchquery}
})
.done(function(res){
  var persons = res;
})

Express 是这样渲染页面的:

exports.search = function(req, res){
res.render('./contacts/search', { title: 'Contact search', persons: persons });
};

请求返回更新的人员变量,我需要为联系人列表生成 html。我尝试了很多方法,但无法实现。页面最初呈现的方式是这样的,所以我不知道如何根据更新的人员变量刷新列表。

HTML 是这样的:

 <% if (persons.length) { %>
    <% persons.forEach(function(person) { %>
    <div class='contactlistusername'><%= person.username %></div>
    <% })}%>

【问题讨论】:

  • is persons 是 Array 对象吗??

标签: javascript jquery express ejs


【解决方案1】:

尝试在不同的模板中处理每个 AJAX 更新的成功结果来呈现:(在 js 中)

var renderedData = new EJS({url:'/template/rendering.template'}).render({data:persons});
$('.contact').html(renderedData);

如果 people 是从 AJAX 响应返回的数组对象,则在不同的模板文件中处理:(在模板中)

<% if (persons.length) { %>
<% for(var i in persons) { %>
<div class='contactlistusername'><%= persons[i].username %></div>
<% }} %>

【讨论】:

  • Persons 是一个数组对象,嵌入的 js 在初始加载时工作正常。问题是当 jquery 进行 ajax 调用并获取更新的 people 数组对象时,如何触发仅加载您编写的代码。如果我把你写的东西放在 ajax 成功回调上仍然没有任何反应......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2020-11-17
  • 2016-02-26
相关资源
最近更新 更多