通过调用python脚本来增加Javascript函数调用的延迟

时间:2018-09-24 17:27:19

标签: javascript jquery ajax

我研究了很多使用setIntervalsetTimeout的解决方案,但是我认为我可以通过使用python脚本在函数调用之间增加延迟来解决问题。

解释代码:

  • 我有一个下拉菜单,其中包含今天正在进行的足球比赛。当用户从该下拉列表中选择一个选项时,即,它检测到change时,它将执行一堆代码以使用相关信息更新页面。

  • 在此功能内,我还有另一个功能liveCommentaryCall() 它使用AJAX获取从下拉菜单中选择的足球比赛中的最新更新。

  • 我当然需要每X秒调用一次以更新网页 关于最新事件。
  • 在函数结束时,我向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脚本,还是我只是没有正确编码此想法?

1 个答案:

答案 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>