我使用MongoDB和NodeJS(使用Express Framework)。
我实际做了什么:
我想做什么:
过滤特定项目。
过滤后的结果都是正确的,但我的问题是该页面会呈现两次。
我该如何防止这种情况?
我有一个主要的上下文,实际上看起来像这样:
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) {
});
});
这是搜索的后端片段:
app.post('/search', auth, function(req, res) {
console.log("Filterrequest received.");
getItems(req, res, function(results) {
renderResults(req, res);
});
});
答案 0 :(得分:0)
我认为您要渲染相同的视图两次,因为您在两个请求get和post中调用renderResults
函数
<强>问题:强>
您发出的第一个HTTP请求是对/main
网址的GET请求,表示处理它并呈现pages/main
视图
第二个请求是/search
url的xhr帖子,express将处理它并呈现相同的视图pages/main
(整个页面)
将整个页面呈现给您的AJAX对象没有任何意义,相反,您可以使用本机javascript或JQuery呈现JSON对象并更新页面
<强>解决方案:强>
根据请求类型呈现不同类型的数据(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);
}