Jquery 为什么在添加json迭代的重复结果时,顺序会不断变化?
我首先得到一个JSON视频播放列表。然后,我获取播放列表中提供的每个视频id的JSON信息。从每个视频信息JSON中,我想在“#container”div中列出视频的缩略图url 我的问题是,每当我点击“获取JSON数据”按钮时,缩略图的顺序就会改变。我在控制台中查看,每个视频JSON总是以相同的顺序被查询,只是当我发布JSON中的信息时,它不符合顺序 有什么好处Jquery 为什么在添加json迭代的重复结果时,顺序会不断变化?,jquery,append,Jquery,Append,我首先得到一个JSON视频播放列表。然后,我获取播放列表中提供的每个视频id的JSON信息。从每个视频信息JSON中,我想在“#container”div中列出视频的缩略图url 我的问题是,每当我点击“获取JSON数据”按钮时,缩略图的顺序就会改变。我在控制台中查看,每个视频JSON总是以相同的顺序被查询,只是当我发布JSON中的信息时,它不符合顺序 有什么好处 $(document).ready(function(){ $("button").click(function(){
$(document).ready(function(){
$("button").click(function(){
//$('p').remove();
$.getJSON("https://api.dailymotion.com/playlist/xy4h8/videos",function(result){
$.each(result.list, function (index, value) {
// console.log(value.id);
$.getJSON("https://api.dailymotion.com/video/"+value.id+"?fields=id,title,thumbnail_medium_url",function(resulted){
$("#container").append(resulted.thumbnail_medium_url + "<br />"); // THIS IS THE BIT ALWAYS OUT OF ORDER
}); // use id of each object in list to get next json
}); // for each of the list object within the playlist result obj
}); // get playlist json
}); // button click
});
$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
//$('p')。删除();
$.getJSON(“https://api.dailymotion.com/playlist/xy4h8/videos,函数(结果){
$.each(result.list,函数(索引,值){
//console.log(value.id);
$.getJSON(“https://api.dailymotion.com/video/“+value.id+”?字段=id,title,缩略图\u medium\u url”,函数(结果){
$(“#容器”).append(resulted.thumbnail_medium_url+”
;//这是一个经常出错的位
});//使用列表中每个对象的id获取下一个json
});//对于播放列表结果对象中的每个列表对象
});//获取播放列表json
});//按钮点击
});
感谢您的帮助。这是因为在每个循环中您都在进行ajax调用。所以所有的请求几乎同时进行。根据每个ajax调用所花费的响应时间,值会附加到容器上。因此,谁的响应将首先出现,它将首先添加。这就是为什么顺序总是不同的 如果您希望每次都使用相同的顺序,请将所有ajax请求排队。这可以帮助您将所有ajax请求保持在队列中。请参见第三个示例“对Ajax调用之类的东西进行排队”
函数是用于数据类型设置为
json
的$.ajax()
函数。如果查看jQuery.ajax()函数,您将看到它在默认情况下被设置为异步,这意味着它可能在任何时候发生,并且可能不按指定的顺序。您可以通过使用async:false
和dataType:'json'
$直接执行jQuery.ajax()
来解决此问题。getJSON
是异步的。对于result.list
中的每个元素,您都会发送一个AJAX请求,该请求带有一个回调,该回调会在请求完成时触发,这根本没有保证顺序。