无法使用jquery返回li-id

cant return li id with jquery

本文关键字:返回 li-id jquery      更新时间:2023-09-26

我正在通过ajax引入数据,以填充类似facebook的墙类型应用程序(或twitter墙)。

但当我试图访问第一个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。

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

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

您的错误是试图在异步请求完成之前访问异步请求的结果。简单地说,当你试图提醒你的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
}​