每x秒从服务器请求数据的最佳方法
Best way to request data from server every x seconds
我创建了一个非常简单的例子。我尝试每 X 秒从我的服务器请求一个值,在这种情况下,我只想每秒获取一个随机数。此解决方案有效,但不幸的是,一段时间后似乎发生了无限循环,从而导致崩溃。一段时间后我也会收到超过 100k 错误 net::ERR_INSUFFICIENT_RESOURCES
.
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);
}
实现这一目标的最佳解决方案是什么?
你可以做一个setInterval,然后在里面做一个ajax调用。您可以在 $.ajax 中设置的参数之一是超时 - 以便您可以停止多个 ajax 调用堆叠并导致问题。
$.ajax({
url: '',
type: '',
data: {},
timeout: 3000,
success: function(data){
// do stuff
}
});
有关参数的详细信息,请参阅 http://api.jquery.com/jQuery.ajax/
正如 Derek 所指出的,这是因为您正在进行 2^n 次调用,因为 setInterval 位于函数本身内部。
试试这样吧
window.setInterval(1000, request_data);
function request_data() {
$.post('ajax.php', {
cmd: "get_random_number"
}, function (returned_data, status) {
if (status === "success") {
$("#result_output").html(returned_data);
}
});
}
我通过简单地用setTimeout
替换setInterval
来解决它。
相关文章:
- 在页面上记录数据并实现pushstate()的最佳方式
- 操作数据的最佳实践
- 以角度渲染表中数据的最佳方式
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 将数据绘制到C3的最佳实践
- 在我的代码中管理大量硬编码数据的最佳方法
- Ext JS - 将面板绑定到数据存储的最佳方法
- 将数据从视图传输到javascript的最佳方式
- 本地存储web数据的最佳实践
- 在线/离线数据更新移动最佳实践
- angularjs设计模式和从服务器获取数据的最佳实践
- AngularJS中使用ajax获取数据的最佳方式是什么
- Spring MVC与Google图表,创建javascript数据表的最佳方式是什么
- 更新视图和控制器之间的角度重复数据值的最佳方式是什么
- 在定期更新的 Angular 中存储和使用数据的最佳方式
- 从 Angular.js 视图中修改方法中的数据的最佳做法
- 显示具有 MVC 数据绑定视图模型 ASP.NET JQuery 对话框的最佳方式
- 当数据超过 5k 时,为动手提供条件格式的最佳方法
- 形成数据最佳实践