我通过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。
答案 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
}