我正在使用JQuery Mobile(JQM)处理NodeJS / ExpressJS应用程序。我无法从后端重定向。我的应用程序动态生成按钮
<button class=\"setAttndingbtn btn btn-primary\" value=\"" + curr.place_id + "\">Attending: " + numAttending.numAttnd + " people are going</button>
。使用promises / setTimeout,以下处理程序将附加到所有按钮:
$('.setAttndingbtn').click(function(){
var buttonsir = $(this); //Store this button reference
if($(this).html().slice(0,1) == 'A'){ //Check the button's state
$.getJSON('/api/attending/' + $(this).val(), function(data){ //Ajax
$(buttonsir).text("You are attending! " + data.numAttnd + " people are going"); //Change state
});
} else {
$.getJSON('/api/attending/rmv/' + $(this).val(), function(data){
$(buttonsir).text("Attending: " + data.numAttnd + " people are going");
});
}
});
相关路线如下:
function isLoggedIn(req, res, next){
if(req.isAuthenticated()){
return next();
} else {
res.redirect('/login');
}
}
app.route('/login')
.get(function(req, res){
res.sendFile(p + "/public/login.html");
});
app.route('/api/attending/:number')
.get(isLoggedIn, searchServerInstance.setAttending);
在后端,当一个&#34;参加&#34;单击按钮,我想检查用户是否已登录,如果没有,则将其重定向到登录页面。当我按原样运行代码时,在Firefox的Firebug控制台中,我看到了GET请求,如果我展开它,请在&#34;响应&#34;部分,显示我的登录页面的HTML代码。但该页面实际上并未加载该文件。
我的/login.html有<div data-role="page">
,标题和内容标记,正如JQM推荐的那样。我已尝试将整个登录页面包含在我的/index.html中,但尝试使用res.redirect("/public/index.html#page2")
会导致找不到&#34;文件&#34;。
是否可以使用Node / Express告诉JQM要加载哪个<div data-role="page" id="page1">
?有没有办法强制JQM从服务器端加载/login.html,rel="external"
允许的方式?或者我将不得不放弃JQM?
答案 0 :(得分:0)
通过阅读JQM文档,我找到了一些方法来实现这一点。对于遇到它的其他人来说,这就是我相信我理解的:
ajaxEnabled
,这会关闭JQM的哈希监听和ajax,正常加载URL 。我不知道这是否适用于Express的res.redirect,因为我没有尝试过。res.redirect('/login.html')
替换res.send({loginState: "LOGIN"})
。然后,在客户端,在$.getJSON
侦听器中的$('.setAttndngbtn')
请求中,我输入以下代码:
if(data.loginstate !== "LOGIN"){
$(buttonsir).text("You are attending! " + data.numAttnd + " people are going");
} else {
$(":mobile-pagecontainer").pagecontainer("change", '#page2');
}
它运作得很好!以下是pagecontainer小部件上的JQM文档,该文档允许使用change
方法进行页内重定向或使用load
方法进行外部重定向。