我在下面有这个代码。我随机发现,如果我的警报消息恰好在它所在的位置,它就会起作用。如果我将其取出或移动到任何其他位置,选项卡将不会出现。
该警报究竟在做什么,可以让代码正常工作?如何在没有警报的情况下使其正常工作?
$.ajax({
type: "GET",
url: "../ajax.php",
data: "action=tabs",
dataType: "json",
success: function(Projects){
$.each(Projects, function(i){
/* Sequentially creating the tabs and assigning a color from the array: */
var tmp = $('<li><a href="#" class="tab green">'+Projects[i].name+'<span class="left" /><span class="right" /></a></li>');
/* Setting the page data for each hyperlink: */
tmp.find('a').data('page','../ajax.php?action=lists&projectID='+Projects[i].project_id);
/* Adding the tab to the UL container: */
$('ul.tabContainer').append(tmp);
});
}
});
alert("yes");
ajax 代码正在使用此代码重新调整 json
$query = mysql_query("SELECT * FROM `projects` ORDER BY `position` ASC");
$projects = array();
// Filling the $projects array with new project objects:
while($row = mysql_fetch_assoc($query)){
$projects[] = $row;
}
echo json_encode($projects);
返回的数据非常小而且非常快,所以我认为这不是问题。
最佳答案
这是因为 Ajax 请求是异步的。它们与主脚本一起运行,并且在您执行 $.each(Projects, function(i)
.
显示并单击 alert()
可以为脚本提供足够的时间来获取数据,这就是为什么它看起来是这样工作的。
您需要将完整的过程放入success
回调中:
success: function(data){
Projects = data;
$.each(Projects, function(i){
........... // do all the stuff
}
关于jquery - 使用 jQuery 处理 JSON 数据 - 需要alert() 的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3026744/