2011-10-12 67 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');