不能用jquery返回li id

时间:2012-03-16 12:54:55

标签: javascript jquery

我通过ajax提取数据来填充类似Facebook的墙式应用程序(或推特墙)。

但是当我尝试访问第一个li时,我正在变得不确定 - 如果有人能够发现我明显的错误,那将会受到赞赏

var get_venues = function(){

        $.ajax({
            type: "GET",
            url: '<?=base_url()?>wall/start_to_grab/',
            dataType: "JSON",
            success: function(data) {
                var sel = $("#wall");
                sel.empty();    

                for (var i=0; i < data.length; i++) {

                  sel.append('<li id="'+data[i].post_id +'"> ' + data[i].title + '</li>');

                }


            }
        });
        //start_poll($('ul#wall li:first').attr('id'));
        alert($("ul#wall li:first").attr("id")); // returns undefined
    };

即使我能看到页面上的元素,代码也会返回undefined。

2 个答案:

答案 0 :(得分:5)

这就是AJAX的工作方式(异步,顾名思义)。在AJAX请求返回响应之前执行alert,因此没有附加li个元素。

alert移到AJAX成功事件处理程序中。或者,您可以使AJAX请求同步,但这几乎总是不是您想要的。

答案 1 :(得分:1)

您的错误是在异步请求完成之前尝试访问异步请求的结果。简单地说,当您尝试提醒您的ID时,异步请求尚未完成,因此未附加li。解决方案是在异步请求中调用一个警报您的ID的函数:

var get_venues = function() {
    $.ajax({
        type: "GET",
        url: '<?=base_url()?>wall/start_to_grab/',
        dataType: "JSON",
        success: function(data) {
            var sel = $("#wall");
            sel.empty();

            for (var i = 0; i < data.length; i++) {
                sel.append('<li id="' + data[i].post_id + '"> ' + data[i].title + '</li>');
                // Request complete, call handler to alert ID
                HandleResponse()
            }
        }
    });
};

function HandleResponse() {
    alert($("ul#wall li:first").attr("id")); // returns undefined
}​