NodeJS – 快速重载res.render()后面的页面
我使用MongoDB和NodeJS(使用Express Framework)。
我实际上做了什么:
- 在MongoDb中抓取一些数据
- 呈现这些数据。
我想做的事:
筛选特定项目。
过滤的结果都是正确的,但我的问题是,该页面将呈现两次。
我怎样才能防止呢?
我有一个主要的比赛,实际上看起来像这样:
app.get('/main', auth, function(req, res) { getItems(req, res, function(results) { renderResults(req, res, results); }); });
这是我的renderresult函数:
function renderResults(req, res, results) { console.log("In Rendermethode arrived:"); console.log(results.items); res.render('pages/main', { offerings: results.items, ownUser: { id: req.session.user || "" }, filterObj: { isActivated: typeof results.filterObj !== 'undefined', filterFor: typeof results.filterObj !== 'undefined' ? results.filterObj.filter : "", filterText: typeof results.filterObj !== 'undefined' ? results.filterObj.filterText : "" } }); }
我所做的是在前端发布一个请求:
$("button.doSearch").on("click", function(e) { var dFilter = $("div.filterDropdown button").attr("value") || "", dFilterText = $("input.searchterm").val() || ""; $.post("/search", { filter: dFilter, filterText: dFilterText }, function(data, status) { }); });
这是search的后端代码片段:
app.post('/search', auth, function(req, res) { console.log("Filterrequest received."); getItems(req, res, function(results) { renderResults(req, res); }); });
我想你是两次渲染相同的观点,因为你在请求get和post都调用renderResults
函数
问题:
您所做的第一个HTTP请求是对/main
url的GET请求,express处理它并呈现pages/main
视图
第二个请求是xhr发布到/search
url,express将处理它并呈现相同的视图pages/main
(整个页面)
把整个页面渲染到你的AJAX对象是没有意义的,相反,你可以渲染一个JSON对象并使用本地JavaScript或者JQuery来更新你的页面
解:
根据请求types渲染不同types的数据(xhr OR否):
function renderResults(req, res, results) { var result = { offerings: results.items, ownUser: { id: req.session.user || "" }, filterObj: { isActivated: typeof results.filterObj !== 'undefined', filterFor: typeof results.filterObj !== 'undefined' ? results.filterObj.filter : "", filterText: typeof results.filterObj !== 'undefined' ? results.filterObj.filterText : "" } }; if (!req.xhr) { return res.render('pages/main', result); } res.json(result); }