在Jquery中获取变量undefined

时间:2011-10-12 07:39:45

标签: jquery

我使用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);

});

2 个答案:

答案 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');