我制作了一个 JSON 文件来存储 SoundCloud URL。然后我的 $.each()
加载 JSON 文件的数据,并根据这些数据从 SoundCloud API 收集更多数据。不知何故,SoundCloud 导致我的循环以随机顺序加载数据,而不是按照 JSON 文件中的方式加载数据。
这是我获取数据和 SoundCloud 位的代码:
$.getJSON("http://www.json-generator.com/api/json/get/bLjOHIYsAy?indent=2", function(data){ //Link of the playlist
$.each(data.PlayListArray, function(key, val){ //navigate to array called PlayListArray
var songLink = val.URL; // the value of URL in the array
SC.get('/resolve', { url: songLink }, function(track) { //convert SoundCloud URLs to ids to get their data.
$("#demo").append("<p id= "+ track.id + ">" + track.title + "</p>");
});
});
});
当我在循环中没有任何 SoundCloud 代码的情况下加载数据时,顺序是正确的。但是对于 soundcloud,每次刷新页面时,顺序都是不同的。请看一下演示:http://jsfiddle.net/Fq2Rw/
在 JSFiddle 上,请多次运行代码,您每次都会看到顺序发生变化。这是为什么?任何想法?或者有什么不同的方式来循环 JSON?
最佳答案
您的代码正在循环遍历每个 SC.get
,但它不会等待 SC.get
完成。因此每次重新加载时的顺序都是不同的。
我会将其更改为使用 SC.get
的回调参数来加载下一个 URL。
经过进一步思考,我建议使用 jquery 延迟函数来链接事件。
请看这篇文章: Soundcloud Javascript API SC.get() will not allow me to change a variable outside of the function
关于javascript - 为什么 SoundCloud API 会导致循环以不同的顺序列出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24420781/