SailsJs - 使用新数据刷新视图
SailsJs - Refresh View with new data
这是我的第一个 Node 应用程序,我正在尝试根据用户应用的过滤器刷新视图。我想在 table 中显示数据,如下所示
上面的代码是
async function getAll(req, res){
try {
if (req.session.loginError == true) {
return res.redirect('/');
}
//** logic to fetch data in sData[]
return res.view('pages/list', {data:sData});
}
catch(error){
sails.log.error('Controller#getAll :: error :', error);
return res.badRequest('Cannot fetch data at this time.' + error.stack);
}
}
以上工作正常。问题是如果我们 select 一些日期过滤器,如 fromDate 和 toDate,来自后端的数据被正确获取,但视图没有刷新。
我在 ejs 页面中放置了以下代码以将过滤器发送到控制器:
function search()
{
var searchData = {
fromDate : document.querySelector('#fromDate').value,
toDate : document.querySelector('#toDate').value,
status : document.querySelector('#status').value
};
var xmlhttp=new XMLHttpRequest();
url = "/admin/controller/filterData";
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
xmlhttp.send(JSON.stringify(searchData))
}
在名为 filterData 的控制器中创建了一个新方法,如下所示
async function filterData(req, res) {
try {
if (req.session.loginError == true) {
return res.redirect('/');
}
var sDate = Date.parse(req.param('fromDate'));
var eDate = Date.parse(req.param('toDate'));
var sta = req.param('status')
var data= await ****.find().where({ and: [{ start_date: { '>': sDate, '<': eDate } }, { status: sta }] }).populate("***").sort('createdAt DESC');
let sData = [];
_.forEach(d, function(data){
//logic to format data
sData.push(d);
});
return res.view('pages/list', {data:sData});
}
catch (error) {
sails.log.error('Controller#getfilterData :: error : ', error);
return res.redirect('/admin/***/getAll');
}
}
sData[] 获取过滤记录,但页面未使用新数据刷新。我不确定我们是否可以像这样刷新视图,或者是否需要将过滤后的数据发送回视图中的功能,然后必须从那里刷新 table。请指教
您正在发送 XMLHttpRequest
,这是一个 ajax
呼叫。所以页面根本不会重新加载。最好 return 服务器对 /admin/controller/filterData
请求的 json 响应,然后用 ajax 响应填充 UI。
这是我的第一个 Node 应用程序,我正在尝试根据用户应用的过滤器刷新视图。我想在 table 中显示数据,如下所示
上面的代码是
async function getAll(req, res){
try {
if (req.session.loginError == true) {
return res.redirect('/');
}
//** logic to fetch data in sData[]
return res.view('pages/list', {data:sData});
}
catch(error){
sails.log.error('Controller#getAll :: error :', error);
return res.badRequest('Cannot fetch data at this time.' + error.stack);
}
}
以上工作正常。问题是如果我们 select 一些日期过滤器,如 fromDate 和 toDate,来自后端的数据被正确获取,但视图没有刷新。 我在 ejs 页面中放置了以下代码以将过滤器发送到控制器:
function search()
{
var searchData = {
fromDate : document.querySelector('#fromDate').value,
toDate : document.querySelector('#toDate').value,
status : document.querySelector('#status').value
};
var xmlhttp=new XMLHttpRequest();
url = "/admin/controller/filterData";
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader('Content-Type', 'application/json;charset=UTF-8')
xmlhttp.send(JSON.stringify(searchData))
}
在名为 filterData 的控制器中创建了一个新方法,如下所示
async function filterData(req, res) {
try {
if (req.session.loginError == true) {
return res.redirect('/');
}
var sDate = Date.parse(req.param('fromDate'));
var eDate = Date.parse(req.param('toDate'));
var sta = req.param('status')
var data= await ****.find().where({ and: [{ start_date: { '>': sDate, '<': eDate } }, { status: sta }] }).populate("***").sort('createdAt DESC');
let sData = [];
_.forEach(d, function(data){
//logic to format data
sData.push(d);
});
return res.view('pages/list', {data:sData});
}
catch (error) {
sails.log.error('Controller#getfilterData :: error : ', error);
return res.redirect('/admin/***/getAll');
}
}
sData[] 获取过滤记录,但页面未使用新数据刷新。我不确定我们是否可以像这样刷新视图,或者是否需要将过滤后的数据发送回视图中的功能,然后必须从那里刷新 table。请指教
您正在发送 XMLHttpRequest
,这是一个 ajax
呼叫。所以页面根本不会重新加载。最好 return 服务器对 /admin/controller/filterData
请求的 json 响应,然后用 ajax 响应填充 UI。