【发布时间】:2016-03-08 11:06:06
【问题描述】:
我创建了一个非常简单的示例。我尝试每隔 X 秒从我的服务器请求一个值,在这种情况下,我只想每秒获取一个随机数。
该解决方案有效,但不幸的是,一段时间后似乎发生了无限循环,从而导致崩溃。过了一段时间net::ERR_INSUFFICIENT_RESOURCES,我也收到了超过 100k 的错误。
request_data(1000);
function request_data(intervall) {
$.post('ajax.php', {
cmd: "get_random_number"
}, function (returned_data, status) {
if (status === "success") {
$("#result_output").html(returned_data);
setInterval(function() {
request_data(intervall);
}, intervall);
}
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="result_output></p>
// ajax.php
<?php
$cmd = filter_input(INPUT_POST, "cmd");
if (isset($cmd) && $cmd == "get_random_number") {
echo rand(5, 15);
}
实现这一目标的最佳解决方案是什么?
【问题讨论】:
-
如果你只是得到一个随机数,为什么不在客户端这样做以节省带宽和服务器处理时间呢?如果这是您针对这个问题的逻辑的简化版本,请查看使用 websockets。
-
肯定会是无限的,因为你使用的是 setInterval 而不是 setTimeout
-
将
setInterval更改为setTimeout。您正在拨打O(2^n)电话。 -
为什么不使用 websockets 或 longpolling?
-
每秒向服务器发送一个请求对服务器来说非常繁重。如果您要实现实时应用程序。使用nodeJS。
标签: javascript php jquery ajax settimeout