2011-10-12 130 views
0

我有使用jquery通过ajax从数据库加载的行。它通过ajax抓取一个php页面,php页面从db获取结果,然后将其返回并在jquery中显示结果在网页的div内。然后我有一个每60秒运行一次的函数来更新每一行,但是因为数据是通过ajax加载的,所以它不会“看到”每60秒运行此代码所需的元素。这里是给我的未定义错误的代码:在Jquery中获取变量undefined

var waitlist_info = $('.currbar').attr('title'); 

我可以使用jQuery的生活为此工作?如果是的话,我将如何使它在这种情况下工作?我只使用live来绑定到像点击这样的动作。

编辑

这是额外的代码。我添加了检查以查看是否至少有一次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

请显示更多代码,以便我们了解您的问题。一点HTML也会有帮助。谢谢! – vzwick

+0

'$('.currbar')。attr('title');'将返回第一个'.currbar'元素的值。在执行$('。currbar')'时搜索DOM,因此它可以与动态添加的元素一起工作。 –

+0

如果这是在ajax之后调用的函数的一部分 – Alex

回答

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秒。

+0

如果使用'$(“.currbar:first”).length'来测试jQuery对象是否为空,可能会更好。 – jfriend00

+0

@Senica Gonzalez我相信是这样,那么如何在页面加载后运行它? – John

+0

如果您的自动刷新在后台运行,它有时会在您的.ajax调用正在获取数据的同时运行。您可能需要在ajax调用之前停止计时器并在之后重新启动计时器,或者您必须在隐藏输入中添加信号量属性,您可以在计时器内检查它,以便知道何时可以更新它。 – Johncl

0

首先你可以创建var waitlist_info;但不要初始化它。当你的函数正在运行,然后在该函数中初始化它为waitlist_info = $('.currbar').attr('title');