我有一个页面,显示接受参加活动的人以及有关他们的一些细节。这些人通过填写表格然后提交到数据库来接受。我的页面基本上向它发出一个AJAX请求并获取所有相关数据,然后将它们分类为可读的布局。
我正在尝试为查看此页面的人添加选项以设置刷新率 - 即每次重新生成AJAX请求之前的时间。例如,一个人可以选择30秒,所以每次30秒的页面都会发出另一个AJAX请求并覆盖旧数据......
我所做的是有一些选项的下拉框(60秒,120秒等)。 当部分加载包含AJAX调用的javascript时,从dropbox获取值并将其用作setInterval函数中的参数,如下所示
recurring = setInterval(function() {
getSchedule(dateText.trim());
},
$('input[type=hidden]#rr').val());
但请求是不间断的。起初我认为问题可能是JQuery选择的结果是字符串,当预期的参数应该是数字所以我试过
recurring = setInterval(function() {
getSchedule(dateText.trim());
},
parseInt($('input[type=hidden]#rr').val(),10));
但仍然没有。 我不知道它是否意味着什么,但在测试这段代码时(当我试图查看该值的类型时)
var interval = parseInt( $('input[type=hidden]#rr').val() , 10 );
alert( typeof ( interval ) + ' -- ' + interval );
警告框写入
号码 - NaN
任何想法?
好的,这是一个显示html代码的编辑
<div class='fields'>
<input type='hidden' name='rr' id='rr' value='<?php if ( $_SESSION['rr'] != 0 ) echo $_SESSION['rr']*1000; else echo 86400000; ?>'/>
<div style='float:left; padding-top:5px;'>
<b><i>TIME</i></b>
</div>
</div>
<div id='schedule' style='overflow:auto;'>
</div>
这是显示数据的部分。 AJAX结果进入计划div并且是更新的结果。隐藏字段包含间隔的毫秒数,是我使用JQuery获取它的地方。它存储在一个数据库中,当加载此页面时,与数据库进行一些通信并从那里获取并将其保存在会话数组中
答案 0 :(得分:1)
一旦您使用setInterval
,除非您明确致电clearInterval
,否则continue会调用您的函数。
相反,我建议你应该像这样使用[setTimeout]
setInterval(function () {
getSchedule(dateText.trim());
},
$('input[type=hidden]#rr').val());
并在函数getSchedule
中再次调用setInterval。这样,每次执行该函数时,它都会为自己设置时间段。
function getSchedule(...){
...
setInterval(function () {
getSchedule(dateText.trim());
},
$('input[type=hidden]#rr').val());
}
就输入值而言,在看到您的HTML
之前我无法发表评论答案 1 :(得分:0)
[更新] 一些评论可能会有所帮助但不能解决您的问题:
供您选择,因为您使用的是id,您应该直接选择(更快):
parseInt($('#rr').val()); // by default the base is 10
注意:你不必使用typeof,因为你总是解析为int,它总是一个数字
我想也许你的问题与那个价值有关,它是否存在?你能检查一下页面并查看html的值是什么吗?
答案 2 :(得分:0)
所以我从来没有理解为什么这个值读错了,也许浏览器在更改之前使用了缓存并加载了javascript ...无论如何,在上面的帮助下,我的最终解决方案是以下
$(document).ready(function() {
$('#datepicker').datepicker( {
showOtherMonths: true,
selectOtherMonths: true,
dateFormat: 'yy-mm-dd',
inline: true,
onSelect: function(dateText, inst) {
getSchedule(dateText.trim());
}
});
var timeout;
var today = $('#datepicker').datepicker('getDate');
getSchedule($.datepicker.formatDate('yy-mm-dd', today));
});
function getSchedule(date)
{
if ( 'undefined' === typeof(timeout) ) ; else clearTimeout(timeout);
timeout = setTimeout(function() {
getSchedule(date);
},
parseInt($('input[type=hidden]#rr').val(), 10)
);
var request = $.ajax({
type : 'POST',
url : './scripts/php/schedule.php',
data : { date: date }
});
request.done(function(data,textStatus,jqXHR) {
var height = $(window).height()-150;
$("#schedule").height(height).html(data);
}
});
request.fail(function(jqXHR, textStatus, errorThrown) {
});
}
和html
<div class='fields'>
<input type='hidden' name='rr' id='rr' value='<?php if ( $_SESSION['rr'] != 0 ) echo $_SESSION['rr']*1000; else echo 86400000; ?>'/>
<div style='float:left; padding-top:5px;'>
<b><i>TIME</i></b>
</div>
</div>
<div id='schedule' style='overflow:auto;'>
</div>