2016-03-04 42 views
0

我有一个脚本,从json调用中获取数据,并且它工作正常。唯一的问题是每次使用jquery时它会随机进入并显示。 MySQL的查询很好,如果我“排列列名ASC”或其他任何东西导致JSON代码输出正常。jquery每个不按顺序排序json数据

这里是部分:

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)); 
     }); 
    } 

我怎样才能解决这正常吗?有人可以告诉我吗?

谢谢!

+0

您的问题是什么?你为什么做这个 – Derek

回答

1

getJSON进行AJAX调用以获取数据。 AJAX stands for Asynchronous Javascript And XML。意思是,请求按顺序进行,但是,在前一个请求结束之前,第二个或第三个或第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