文档准备就绪功能

时间:2013-03-27 19:44:28

标签: javascript jquery

我需要在页面加载时开始轮询URL,以从信用卡服务器获取JMS响应。我把以下内容放在一起。

它可以工作,但只有我点击浏览器上的“刷新”按钮。我希望在首次显示页面时自动加载URL中的数据,而不需要用户刷新。

我在这里缺少一个基本概念,并希望了解如何使其发挥作用。到目前为止,我有大约2天的JavaScript经验。

<html>
    <body>

        <div id="p_results"></div>

        <script type="text/javascript">
            $(document).ready(function() {
                function doJMSPolling() {
                    $.ajax({
                        url: "./poll",
                        type: "GET",
                        dataType: "text",
                        success: function(json) {

                            var json = $.parseJSON(json);

                            if (json.status === 'continue-polling' && json.msg === 'ok') {
                                setTimeout(function() {
                                    doPolling();
                                }, 2000);
                            }
                            else if (json.status === 'stop-polling' && json.msg === 'success') {
                                for (key in json) {
                                    if (key === "providerResponse") {
                                        res = json[key];
                                        for (reskey in res) {
                                            $("#p_results").append(reskey + ":" + res[reskey] + "<br>"); 
                                        }
                                    }
                                }
                            } else if (json.status === 'stop-polling') {
                                $("#p_results").text(json.status);
                            }
                        }
                    });
                }
            });
        </script>
    </body>
</html>

3 个答案:

答案 0 :(得分:4)

您不必将实际功能定义放在document.ready回调中。该函数可以位于<script>标记内的任何位置。完成后,您需要做的就是在document.ready回调中调用该函数 -

<script type="text/javascript">
$(function(){
  doJMSPolling();
});

function doJMSPolling(){
 ...
}
</script>

注意:

$(function(){})$(document).ready(function(){})

的简写

答案 1 :(得分:3)

在我看来,你宣布你的功能,但不是在呼唤它。为了执行函数的代码,你需要在document.ready中的函数声明之后添加它:

doJMSPolling();

答案 2 :(得分:3)

不要将您的功能置于 document.ready内,只需将其称为。试试这个:

$(document).ready(function() {
    doJMSPolling();
});

function doJMSPolling() {
    $.ajax({
        url: "./poll",
        type: "GET",
        dataType: "text",
        success: function(json) {
            var json = $.parseJSON(json);
            if (json.status === 'continue-polling' && json.msg === 'ok') {
                setTimeout(function() {
                    doPolling();
                }, 2000);
            }
            else if (json.status === 'stop-polling' && json.msg === 'success') {
                for (key in json) {
                    if (key === "providerResponse") {
                        res = json[key];
                        for (reskey in res) {
                            $("#p_results").append(reskey + ":" + res[reskey] + "<br>"); 
                        }
                    }
                }
            }
            else if (json.status === 'stop-polling') {
                $("#p_results").text(json.status);
            }
       }
  });
}