我使用jquery通过ajax从数据库加载了行。它通过ajax抓取一个php页面,php页面从db获取结果然后返回它并在jquery中我在网页上的div中显示结果。然后我有一个每60秒运行一次的函数来更新每一行,但是因为数据是通过ajax加载的,所以它不会“看到”每60秒运行一次代码所需的元素。这是给我未定义错误的代码:
var waitlist_info = $('.currbar').attr('title');
我可以使用jquery live来实现吗?如果是这样,我将如何在这种情况下使其工作?我只使用live来绑定像click这样的动作。
修改
这是其他代码。我添加了检查以查看是否至少有一次currbar实例,但是当代码运行时,currbar检查始终为零,直到60秒后它才起作用。
jQuery.noConflict();
jQuery(function($) {
function displayListTimes() {
if($(".currbar:first").length > 0)
{
var list_info = $('.currbar').attr('title');
var break_info = list_info.split('<>');
$.ajax({
type:"GET",
data:'tzone=' + break_info[1],
url:"/ajax/time.php",
success: function(data) {
$('.progress').each(function() {
//code runs here
});
}
});
}
};
var socket = io.connect('http://localhost:2424');
socket.on('connect', function () {
$.get('/getlist.php', function() {});
});
socket.on('message', function (json) {
var obj = $.parseJSON(json);
$('#listqueue').html(obj.queuelist);
});
displayListTimes();
setInterval(displayListTimes,60000);
});
答案 0 :(得分:2)
在没有看到其余代码的情况下,您可能会收到此错误,因为该函数在页面加载第一组元素之前运行。
因此,您可以使用
检查元素是否存在if($(".currbar:first")[0]){
var waitlist_info = $('.currbar').attr('title');
}
这将阻止您收到未定义的错误。
如果您通过ajax将html添加到页面,您还可以使用:
jQuery(document).bind("DOMSubtreeModified", function(){
var waitlist_info = $('.currbar').attr('title');
//Then do rest of code here
});
这不会每60秒运行一次,但每当有东西被添加到页面时它都会运行。
另外,你可以做到
jQuery.post("ajax page", {vars:vars}, function(html){
jQuery("#someelement").append(html);
var waitlist_info = jQuery(".currbar").attr("title");
//whatever code you need here
});
同样,这不是每60秒。
答案 1 :(得分:0)
首先你可以创建var waitlist_info;
但不要初始化它。当您的函数正在运行时,请在该函数中将其初始化为waitlist_info = $('.currbar').attr('title');