1

我正在尝试从 Yammer 创建一种 RSS 源类型的消息显示。

<script type="text/javascript">
    var cleanit = null;
    $(document).ready(function(){ cleanit = setInterval('callYammer()', 50);});
    function callYammer(){ 
        clearInterval(cleanit);
        $.getJSON("./yammer.feed?request=messages",function(json) {
            var objYammer = $("#yammerFeed");
            objYammer.html('');
            $.each(json.messages, function(i, m) {
                if(!m.replied_to_id && m.body.plain){
                    var data = "<li>" + m.body.plain;
                    $.getJSON("./yammer.feed?request=users&userid="+m.sender_id,function(jsonUser) {
                        //alert(jsonUser.full_name);
                        data = data + " - "+jsonUser.full_name;
                    });
                    data = data + "</li>";
                    objYammer.append(data);
                }
            });
        });
        return false;
    }
</script>

我想显示消息及其用户名。但最后,从萤火虫调试器,我看到的是内部 JSON 数据没有像我预期的那样被附加。尽管呼叫正在发生并且数据来自呼叫,但

数据 = " - "+jsonUser.full_name;

在对用户的所有 JSON 调用之后执行。

如何将用户名从内部 JSON 调用附加到主要 JSON 数据?

4

1 回答 1

1

你打电话给线路

data = data + "</li>";
objYammer.append(data);

在您的内部 getJSON AJAX 调用之后的代码中,但这可能会导致在 AJAX 请求完成之前执行这些行。将代码放入内部 AJAX 成功函数中,以确保仅在结果可用后才触发它。

function callYammer(){ 
    clearInterval(cleanit);
    $.getJSON("./yammer.feed?request=messages",function(json) {
        var objYammer = $("#yammerFeed");
        objYammer.html('');
        $.each(json.messages, function(i, m) {
            if(!m.replied_to_id && m.body.plain){
                var data = "<li>" + m.body.plain;
                $.getJSON("./yammer.feed?request=users&userid="+m.sender_id,function(jsonUser) {
                    console.log('1:'+jsonUser.full_name);
                    data += " - "+jsonUser.full_name + "</li>";
                    objYammer.append(data);
                    console.log('2:'+data);
                });
            }
        });
    });

编辑:

刚刚添加了console.log()语句。他们返回什么?

于 2013-09-16T09:11:40.940 回答