我有一个脚本可以从 json 调用中获取数据,它工作正常。唯一的问题是,当使用jquery时,它是随机进入和显示的。mysql 查询很好,如果我"按 ASC 排序"或其他什么,则 json 代码输出正常column_name。
这是部分:
success: function(viddata) {
$.each(viddata.videos, function(i, video){
$.getJSON("https://www.googleapis.com/youtube/v3/videos", {
key: "mykey",
part: "snippet,contentDetails,statistics",
id: video
}, function(data) {
var duration = convert_time(data.items[0].contentDetails.duration);
var views = data.items[0].statistics.viewCount.toString().replace(/'B(?=('d{3})+(?!'d))/g, ",");
$(".bbox_content.bbox_videos .content_loader_container").remove();
$(".bbox_content.bbox_videos").append($('<div class="bbox_item bbox_video_item" id='"' + video + ''"><a class="video_item youtube_video" name='"' + video + ''" href="/video/' + video + '" style="background-image:url('+ data.items[0].snippet.thumbnails.high.url +');"><span class="img"><img width="100%" src="/images/movie_arrow.png"/></span><span class="video_time">'+ duration +'</span></a>'+ viddata.controls +'<div class="bbox_video_item_info"><span class="video_title">'+ data.items[0].snippet.title +'</span><span class="view_count">Views: '+ views +'</span></div></div>').hide().fadeIn(800));
});
}
如何正确排序?有人可以给我看看吗?
谢谢!
getJSON
进行 AJAX 调用以获取数据。AJAX 代表 异步 Javascript 和 XML。这意味着,请求是按顺序发出的,正如您所期望的那样,但是,发出的第 2 个、第 3 个或第 n 个请求可能会在上一个请求完成之前返回。要测试这种情况是否发生在您身上,请在浏览器中打开开发人员控制台并查看网络活动(应该有一个过滤器来仅查看 XHR*。使用它)
解决方案是在上一个请求返回之前不发出请求,或者事先附加所有需要附加的div,并跟踪哪个请求填充了哪个div。
success: function(viddata) {
$.each(viddata.videos, function(i, video) {
var $videoDiv = $('<div id="' + video + '" style="display:none;"></div>').appendTo(".bbox_content.bbox_videos");
$.getJSON("https://www.googleapis.com/youtube/v3/videos", {
key: "mykey",
part: "snippet,contentDetails,statistics",
id: video
}, function(data) {
var duration = convert_time(data.items[0].contentDetails.duration);
var views = data.items[0].statistics.viewCount.toString().replace(/'B(?=('d{3})+(?!'d))/g, ",");
$(".bbox_content.bbox_videos .content_loader_container").remove();
$videoDiv.addClass('bbox_item bbox_video_item')
.append('<a class="video_item youtube_video" '
+ ' name="' + video + '" '
+ ' href="/video/' + video + '" '
+ ' style="background-image:url('+ data.items[0].snippet.thumbnails.high.url +');">'
+ '<span class="img">'
+ '<img width="100%" src="/images/movie_arrow.png"/>'
+ '</span>'
+ '<span class="video_time">'+ duration +'</span>'
+ '</a>'
+ viddata.controls
+ '<div class="bbox_video_item_info">'
+ '<span class="video_title">'
+ data.items[0].snippet.title
+ '</span>'
+ '<span class="view_count">'
+ 'Views: '+ views
+ '</span>'
+ '</div>')
.fadeIn(800);
});
}
我可能在格式上有点过火了,但你必须承认,更容易看到发生了什么。
*XHR: XmlHttpRequest