迭代json列表时未定义的错误

问题描述:

我得到这个代码,它继续返回未定义的味精而不是预期的html。 功能目的: 以下功能的目的是为了返回类似于fb的通知。代码工作正常。但getJSON部分有些问题,我无法弄清楚。所以,而不是返回“克隆x1喜欢你的帖子”我得到未定义。 代码迭代json列表时未定义的错误

function buzzme() 
{ 
jQuery('#cnumber').removeClass(); 
jQuery('#cnumber').empty(); 

jQuery('#floating_box').toggle(); 

var nHeader = '<div id="floating_box" class="fb">' + 
'<div id="header"><span id="htext">Notifications</span></div>' + 
'<div id="int">' + 
'<div id="bodyx">' + 
'<ul>'; 
var nFooter = '</ul>' + 
'<div class="jfooter">' + 
'<a href="#" id="seemore">See all notifications</a>' + 
'</div>' + 
'</div>' + 
'</div>' + 
'</div>'; 
var nContent; 

jQuery.getJSON('notifications.php', {'n':1,'dht':3692}, function(response){ 
    jQuery.each(response, function(i, nt2){ 
     nContent += '<a href="#"><li id="lix">sdfsdfsd'+nt2.img+' '+nt2.notifier+'</li></a>'; 

    }) 

}); 

alert(nContent); 
var nFinal = nHeader+nContent+nFooter; 
if (!jQuery('#floating_box').length) { 
    jQuery('body').append(nFinal); 
} 
} 

notifications.php - setUpFlayout();和setUpJSONList()

function setUpFlyout() { 
    $notify = new se_notify(); 
    $data2 = $notify->notify_summary(); 
    $trk = 0; 

    if($data2['total'] >= 1) { 
    for($i = 0; $ $i <= $data2['total']; $i++) { 
$nid = $data2['notifys'][$i]['notify_id']; 
$im = $data2['notifys'][$i]['notify_icon']; 
$img = "<img src='./images/icons/$im' />"; 
$notifier = $data2['notifys'][$i]['notify_text'][0]; 
$atype = $data2['notifys'][$i]['notifytype_id']; 
$url = ''; 
$url2 = $data2['notifys'][$i]['notify_url']; 
if($atype == 1) { 
    $url = ' has sent you friend <a href='.$url2.'>request</a>'; 
} 
$trk++;  
if($data2['total'] >= 2) { 
    $ret_arr = ''; 
    if($i == 0) { 
     $ret_arr = '['; 
    } 
    $ret_arr = $ret_arr.setUpJSONList($data2['total'], $nid, $img, $notifier, $url, $trk); 
    if($i == $data2['total']-1) { 
     $ret_arr = $ret_arr.']'; 
    } 
    echo ''; 
} else if($data2['total'] == 1){ 
    //$ret_arr = '[{"dh3":"'.$data2['total'].'","nid":"'.$nid.'", "img":"'.$img.'","notifier":"'.$notifier.'","url":"'.$url.'"}]'; 
    $ret_arr = ''; 
    echo $ret_arr; 
} 
    if($i == ($data2['total']-1)) 
     break; 
     } 
    } 
} 

setUpJSONList();

function setUpJSONList($total, $nid, $img, $notifier, $url, $track) { 
    $comma = ','; 
    $lp = ''; 
    $rp = ']'; 
    $result = ''; 
    if($track == $total) { 
    $result = '{"pos":"'.$track.'","dh3":"'.$total.'","nid":"'.$nid.'","img":"'.$img.'","notifier":"'.$notifier.'", "url":"'.$url.'"}'; 
    } else { 
     $result = '{"pos":"'.$track.'","dh3":"'.$total.'","nid":"'.$nid.'","img":"'.$img.'","notifier":"'.$notifier.'", "url":"'.$url.'"},';  
    } 
    return $result; 
} 

感谢

+0

你能粘贴notifications.php代码吗? – Chris 2010-08-01 13:39:15

+0

我编辑的帖子包括函数涉及setUpJSONList()和setUpFlayout() – clonex1 2010-08-01 13:47:30

+0

JSON输出测试对JSONlint结果是有效的。 js方面出了点问题,我找不到它 – clonex1 2010-08-01 13:49:19

你的getJSON后nContent的使用可能是不确定的,因为的getJSON是异步的,也不会完成初始化nContent。您需要在getJSON的回调中使用nContent来移动代码。

jQuery.getJSON('notifications.php', {'n':1,'dht':3692}, function(response){ 
    jQuery.each(response, function(i, nt2){ 
     nContent += '<a href="#"><li id="lix">sdfsdfsd'+nt2.img+' '+nt2.notifier+'</li></a>'; 

    }) 
    alert(nContent); 
var nFinal = nHeader+nContent+nFooter; 
if (!jQuery('#floating_box').length) { 
    jQuery('body').append(nFinal); 
} 
}); 
+1

+1 - 这是正确的,它不是“可能”,它保证在它正在使用的地方(单线程等)是未定义的。 – 2010-08-01 13:53:01

+0

对不起,这有点模糊。你能在一个片段中演示吗? – clonex1 2010-08-01 14:03:07

+0

@ clonex1 - 用代码 – 2010-08-01 14:08:45