【发布时间】:2018-04-04 23:35:31
【问题描述】:
我试图找到一种方法,让用户只有在特定功能完成运行后才能点击链接。所以在我的例子中,我有 ejs 模板,其中段落中有两个链接。单击第一个(“运行 python”)会激活一个需要一些时间才能完成的脚本。然后只有在它完成之后(所以有 “finished” - 来自控制台上打印的行:console.log('finished')下一个链接(“See the table”)将是可点击的(或取消隐藏或类似的东西)。
<h1>Search for a movie</h1>
<form action="results" method="GET">
<input type="text" placeholder="search term" name="search">
<input type="submit">
</form>
<p><a href="/run"> Run python </a></p>
<p><a href="/data"> See the table </a></p>
这里是 app.js 代码
var express = require("express")
var app = express()
var request = require("request")
var PythonShell = require('python-shell');
app.set("view engine", "ejs")
app.engine('html', require('ejs').renderFile);
var thelist =[]
app.get("/", function(req, res){
res.render("search")
})
var jsondata = ""
app.get("/results", function(req, res){
var query = req.query.search
var url = "http://www.omdbapi.com/?s=" + query + "&type=series&apikey=thewdb"
request(url, function(error, response, body){
if(!error && response.statusCode == 200){
var data = JSON.parse(body)
res.render("results", {data: data})
}
})
})
app.get('/data', function(req, res) {
//viewname can include or omit the filename extension
res.render(__dirname + '/well.html');
});
app.get("/show/:id", function (req, res) {
var id = req.params.id;
thelist.push(id)
console.log(thelist);
res.redirect('/')
});
app.get("/run", function(req, res) {
var pyshell = new PythonShell('script2.py');
pyshell.send(JSON.stringify(thelist))
pyshell.on('message', function (message) {
// received a message sent from the Python script (a simple "print" statement)
jsondata += message
});
// end the input stream and allow the process to exit
pyshell.end(function (err) {
if (err){
throw err;
};
console.log('finished');
});
res.redirect('/')
thelist = []
});
app.listen(process.env.PORT, process.env.IP, function(){
console.log("Movie App has started!!!");
})
【问题讨论】:
-
假设您最初隐藏(或禁用)该链接(“查看表格”),然后在
console.log('finished')之后的pyshell.end函数中为其添加内联样式,这行得通吗? 例如:var linkToEnable = document.querySelector(".link-to-enable); linkToEnable.style.display = "block";(只是一个例子 - 这里的重点是确定您是否可以在预期的时刻添加内联样式:相关函数完成后) -
嗯,我不确定我是否正确地这样做,但我收到错误,即文档未定义。这是服务器端 node.js 代码,它似乎不允许 dom 操作。
标签: javascript html node.js express ejs