我建立了一个站点,该站点使用对外部 API 的 AJAX 调用不断刷新数据。由于浏览器的跨域限制,AJAX 调用使用 JSONP 来获取 JSON 数据字符串。
该站点的功能是在更大的监视器上保持打开状态,以便我们的服务台可以获知他们队列中有多少工单。该网站在一些不确定的时间内运行良好,通常在 30 分钟到一个小时之间。但由于某些奇怪的原因,它中断并尝试重定向到不存在的“index.php”。我不确定是什么原因造成的。
我在下面有相关代码。我花了一些时间将其缩小到特定的 javascript 函数。我花了一些时间在谷歌上寻找答案,但一无所获。
也许有人对正在发生的事情有一些了解?或者有人知道我可以使用任何好的网站监控工具来观察正在发生的事情吗?
要补充一点,我的 AJAX 调用的“ token ”部分在我的站点中是有效的,但为了安全起见,我只是在此处将其清除。
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。
最佳答案
尽量不要设置间隔。你应该只需要 setTimeout()。间隔最终会叠加一堆这样的调用,这样大约 30 分钟后我可以看到内存不足,因为您将同时发出大约 180 个 ajax 调用。不确定为什么会发生重定向 - 我希望浏览器会卡住......如果不进行测试很难判断。
关于javascript - 使用 AJAX 调用 API 时,网站在打开后重定向到 index.php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18151066/