1

我已经建立了一个站点,该站点使用对外部 API 的 AJAX 调用不断刷新数据。由于浏览器的跨域限制,AJAX 调用使用 JSONP 来获取 JSON 数据字符串。

该站点的功能是在更大的监视器上保持打开状态,以便我们的帮助台可以获知他们的队列中有多少票。该网站可以正常工作一些不确定的时间,通常在 30 分钟到一个小时之间。但由于某些奇怪的原因,它会中断并尝试重定向到不存在的“index.php”。我不确定是什么原因造成的。

我在下面有相关代码。我花了一些时间将其缩小到特定的 javascript 函数。我在谷歌上花了一些时间寻找答案,但结果一无所获。

也许有人对正在发生的事情有所了解?或者有人知道我可以用来观察正在发生的事情的任何好的网站监控工具吗?

补充一点,我的 AJAX 调用的“令牌”部分在我的站点中是有效的,但出于安全目的,我只是在这里清除了它。

HTML

<!DOCTYPE html>
<html>
<head>
    <title>WALLBOARD</title>
    <link href="Content/style.css" type="text/css" rel="stylesheet">

    <script src="Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
    <script src="Scripts/wallboard.js" type="text/javascript"></script>
</head>
<body>
    <div id="div_hardware" class="div_normal span6">
        <h1>Hardware</h1>
        <div id="span_hardwareTickets">-</div>
    </div>
    <div id="div_atschool" class="div_normal span6">
        <h1>AtSchool</h1>
        <div id="span_atschoolTickets">-</div>
    </div>
    <div id="div_network" class="div_normal span3">
        <h1>Network</h1>
        <div id="span_networkTickets">-</div>
    </div>
    <div id="div_software" class="div_normal span3">
        <h1>Software</h1>
        <div id="span_softwareTickets">-</div>
    </div>
    <div id="div_openTickets" class="span3 div_normal">
        <h1>Open Tickets</h1>
        <div id="span_openTickets">-</div>
    </div>
    <div id="div_newTickets" class="span3 div_normal">
        <h1>New Tickets</h1>
        <div id="span_newTickets">-</div>
    </div>
    <script>
        grabParature();
    </script>
</body>

JAVASCRIPT

function grabParature() {
var url = "https://s3.parature.com/api/v1/5406/5426/Ticket";

$.ajax({
    url: url,
    type: "GET",
    dataType: "jsonp",
    cache: true,
    jsonp : "_callback_",
    jsonpCallback: "theData",
    data: {
        "_status_type_": "open",
        "_pageSize_" : "500",
        "_output_" : "javascript",
        "_token_" : "##################################"
    },
    success: function (results) {
        var openTickets = 0;
        var newTickets = 0;
        var atschoolTickets = 0;
        var hardwareTickets = 0;
        var softwareTickets = 0;
        var networkTickets = 0;

        for(var i = 0; i < results.Entities.Ticket.length; i++)
        {
            var queue = "";
            var status = results.Entities.Ticket[i].Ticket_Status.Status.Name["#text"];

            if (results.Entities.Ticket[i].Ticket_Queue != undefined) {
                queue = results.Entities.Ticket[i].Ticket_Queue.Queue.Name["#text"];
            }

            if (status === "Open") {
                openTickets++;
            }
            else if (status === "New") {
                newTickets++;
            }

            if (queue === "Hardware") {
                hardwareTickets++;
            }
            else if (queue === "Atschool") {
                atschoolTickets++;
            }
            else if (queue === "Network") {
                networkTickets++;
            }
            else if (queue === "Software") {
                softwareTickets++;
            }
        }
        $('#span_openTickets').html(openTickets);
        $('#span_newTickets').html(newTickets);
        $('#span_hardwareTickets').html(hardwareTickets);
        $('#span_atschoolTickets').html(atschoolTickets);
        $('#span_networkTickets').html(networkTickets);
        $('#span_softwareTickets').html(softwareTickets);

        setInterval(grabParature, 10000);
    }
});

};

编辑

根据 Ryan Wheale 的建议,我将 setInterval(grabParature, 10000) 更改为 setTimeout(grabParature, 10000)。我仍然会重定向到 index.php。

4

1 回答 1

4

尽量不要设置间隔。您应该只需要 setTimeout()。间隔最终会堆积一堆这样的调用,因此大约 30 分钟后,我可以看到您的内存不足,因为您将同时发出大约 180 个 ajax 调用。不知道为什么会发生重定向 - 我希望浏览器冻结......如果没有测试就很难说。

于 2013-08-09T16:13:17.523 回答