如何在 express.js 中显示来自 ajax 的解析数据
How to display parsed data from ajax in express.js
我使用 node.js 制作了此页面 + 表示我在其中显示以下内容 table :
我希望在使用下拉菜单更改限制时使用 ajax 仅使用新数据重新加载 table(带有标签显示结果),但这样做时遇到了问题。
这是显示我的 table 的 ejs 代码:
<table class="assignment-table table table-striped table-bordered table-hover table-condensed table-responsive">
<thead>
<tr>
<th>S.No.</th>
<th>Name</th>
<th>Subject</th>
<th>Topic</th>
<th>Faculty</th>
<th>Posted</th>
<th>Last Date</th>
<th>Mode of Submission</th>
</tr>
</thead>
<tbody class="table_body">
<% for(var i =0;i< result.length;i++) { %>
<tr>
<td class="result_id">
<a target="_blank" href="/assignment/abc.pdf" class="download-link" id="">
<%= result[i]._id %>
</a>
</td>
<td class="result_name">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].nameAssignment %>
</a>
</td>
<td class="result_subject">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Subject %>
</a>
</td>
<td class="result_topic">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Topic %>
</a>
</td>
<td class="result_faculty">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Faculty %></a>
</td>
<td class="result_posted">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Posted %></a>
</td>
<td class="result_lastdate">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].LastDate %></a>
</td>
<td class="result_submission">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Submission %></a>
</td>
</tr>
<% } %>
</tbody>
</table>
在上面提到的 filter_result() 路由中,我从 url 获取限制并使用新限制查询数据库并呈现页面再次.
Router.get('/filter_result',(req,res) => {
limit = parseInt( decodeURIComponent(req.query.limit) );
models.filterResults(limit, (count,result) => {
//if (err) throw err;
console.log(limit);
//res.send(result);
res.render('assignment-list',{limit:limit,result:result,count : count});
});
});
如何在 ejs 页面中重新显示 table?
基本上,当您加载或重新加载页面时,您的 .ejs
格式只会呈现一次。因此,您要做的是在已呈现的 HTML.
之上重新呈现(或替换)您的 AJAX 调用中的 HTML
您似乎已经在使用 jQuery,所以我的示例代码也使用了 jQuery。
重新渲染(或者再次替换)HTML 取决于您的 /filter_result
响应。如果它只是一堆 <tr>
那么它可能是
JS
$('table.assignment-table').find('tbody').html(result);
如果是整个 <table>
,那么您最好用 <div>
之类的包装器将 <table>
包装起来,然后执行以下操作。
HTML
<div id="table-wrapper">
<table>
...
</table>
</div>
JS
$('div#table-wrapper').html(result);
引用包装器和替换内容的方式可能会有所不同。
更新 1
假设您的 API (/filter_result
) returns 一个赋值对象数组,例如
{
"status": "success",
"data": [
{
"Subject": "Your subject",
"Topic": "Your topic",
...
},
...
]
}
你可以从数据中创建一堆 <tr/>
s 并用它们替换现有的 <tr/>
s(当然是 jQuery。关于用 [ 创建 DOM =54=],可以参考the docs.)
$.ajax({
method: 'GET',
url: 'URL_TO_FILTER_RESULT',
data: SOME_DATA,
success: function(res) {
var assignments = res.data;
var body = [];
assignments.forEach(function(assignment) {
var tr = $('<tr/>');
tr.append($('<td/>').html('<a href="blah-blah">' + assignment.Subject + '</a>');
tr.append($('<td/>').html('<a href="blah-blah">' + assignment.Topic + '</a>');
...
body.push(tr);
});
$('table.assignment-table').find('tbody').html(body);
}
})
我使用 node.js 制作了此页面 + 表示我在其中显示以下内容 table :
我希望在使用下拉菜单更改限制时使用 ajax 仅使用新数据重新加载 table(带有标签显示结果),但这样做时遇到了问题。 这是显示我的 table 的 ejs 代码:
<table class="assignment-table table table-striped table-bordered table-hover table-condensed table-responsive">
<thead>
<tr>
<th>S.No.</th>
<th>Name</th>
<th>Subject</th>
<th>Topic</th>
<th>Faculty</th>
<th>Posted</th>
<th>Last Date</th>
<th>Mode of Submission</th>
</tr>
</thead>
<tbody class="table_body">
<% for(var i =0;i< result.length;i++) { %>
<tr>
<td class="result_id">
<a target="_blank" href="/assignment/abc.pdf" class="download-link" id="">
<%= result[i]._id %>
</a>
</td>
<td class="result_name">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].nameAssignment %>
</a>
</td>
<td class="result_subject">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Subject %>
</a>
</td>
<td class="result_topic">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Topic %>
</a>
</td>
<td class="result_faculty">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Faculty %></a>
</td>
<td class="result_posted">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Posted %></a>
</td>
<td class="result_lastdate">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].LastDate %></a>
</td>
<td class="result_submission">
<a target="_blank" href="/assignment/abc.pdf" class="download-link">
<%= result[i].Submission %></a>
</td>
</tr>
<% } %>
</tbody>
</table>
在上面提到的 filter_result() 路由中,我从 url 获取限制并使用新限制查询数据库并呈现页面再次.
Router.get('/filter_result',(req,res) => {
limit = parseInt( decodeURIComponent(req.query.limit) );
models.filterResults(limit, (count,result) => {
//if (err) throw err;
console.log(limit);
//res.send(result);
res.render('assignment-list',{limit:limit,result:result,count : count});
});
});
如何在 ejs 页面中重新显示 table?
基本上,当您加载或重新加载页面时,您的 .ejs
格式只会呈现一次。因此,您要做的是在已呈现的 HTML.
您似乎已经在使用 jQuery,所以我的示例代码也使用了 jQuery。
重新渲染(或者再次替换)HTML 取决于您的 /filter_result
响应。如果它只是一堆 <tr>
那么它可能是
JS
$('table.assignment-table').find('tbody').html(result);
如果是整个 <table>
,那么您最好用 <div>
之类的包装器将 <table>
包装起来,然后执行以下操作。
HTML
<div id="table-wrapper">
<table>
...
</table>
</div>
JS
$('div#table-wrapper').html(result);
引用包装器和替换内容的方式可能会有所不同。
更新 1
假设您的 API (/filter_result
) returns 一个赋值对象数组,例如
{
"status": "success",
"data": [
{
"Subject": "Your subject",
"Topic": "Your topic",
...
},
...
]
}
你可以从数据中创建一堆 <tr/>
s 并用它们替换现有的 <tr/>
s(当然是 jQuery。关于用 [ 创建 DOM =54=],可以参考the docs.)
$.ajax({
method: 'GET',
url: 'URL_TO_FILTER_RESULT',
data: SOME_DATA,
success: function(res) {
var assignments = res.data;
var body = [];
assignments.forEach(function(assignment) {
var tr = $('<tr/>');
tr.append($('<td/>').html('<a href="blah-blah">' + assignment.Subject + '</a>');
tr.append($('<td/>').html('<a href="blah-blah">' + assignment.Topic + '</a>');
...
body.push(tr);
});
$('table.assignment-table').find('tbody').html(body);
}
})