我研究了很多使用setInterval
和setTimeout
的解决方案,但是我认为我可以通过使用python脚本在函数调用之间增加延迟来解决问题。
解释代码:
我有一个下拉菜单,其中包含今天正在进行的足球比赛。当用户从该下拉列表中选择一个选项时,即,它检测到change
时,它将执行一堆代码以使用相关信息更新页面。
在此功能内,我还有另一个功能liveCommentaryCall()
它使用AJAX获取从下拉菜单中选择的足球比赛中的最新更新。
POST
请求
特定的网址/delayRequest
,然后在烧瓶中找到该网址
只需执行sleep()
然后返回即可。liveCommentaryCall()
重新启动更新过程。JAVASCRIPT
$("#teamDropdownSelector").change(function(){
.
.
.
function liveCommentaryCall(){
alert("called");
.
. // bunch of code to update the page
.
$.ajax({
url: "/delayRequest",
type: "POST",
data: JSON.stringify(""),
success: function(response) {
alert("RESPONSE RECIEVED");
},
error: function(delayError) {
alert("Something's gone wrong!");
}
});
liveCommentaryCall();
}
//Now out of the function scope.
//Below is the first time the liveCommentaryCall function gets called.
liveCommentaryCall();
});
PYTHON
@app.route("/delayRequest", methods=['POST', 'GET'])
def delay():
time.sleep(10)
return;
但是,与调用该函数相反,它先运行,然后有10秒的延迟才被再次调用,该网页只是向我显示“被调用”警报,这意味着liveCommentaryCall
会立即在循环中被调用某处?
我在代码中看不到应该引起这种情况的任何地方,这使我认为我忽略了一些基本原理。
问题
错误是我不能使用这样的python脚本,还是我只是没有正确编码此想法?
答案 0 :(得分:0)
您可以在liveCommentaryCall
中使用setInterval
函数来代替递归实现script
:
<script>
setInterval("liveCommentaryCall()",1000); //call every second
function liveCommentaryCall(){
.
. // bunch of code to update the page
.
$.ajax({
url: "/delayRequest",
type: "POST",
data: JSON.stringify(""),
success: function(response) {
alert("RESPONSE RECIEVED");
},
error: function(delayError) {
alert("Something's gone wrong!");
}
});
}
</script>