0

我在通过 json 循环时遇到问题。

在下面的代码中,循环的 url 是无序的,并且警报中的 id 始终是 3。有人可以告诉我我在这里做错了什么吗?

var urls = ["http://soundcloud.com/disclosuremusic/sets/the-face-ep-1", "http://soundcloud.com/skibsthekid/sets/the-pink-slip", "http://soundcloud.com/disclosuremusic/sets/the-face-ep-1"];

for (var i = 0, url; url = urls[i]; i++) {
        console.log(i);

    $.getJSON('http://api.soundcloud.com/resolve?url=' + url + '&format=json&consumer_key=' + consumer_key, function(playlist) {
        alert(i + playlist.title);
    });
}
4

2 回答 2

2
$.each(urls,function(key,value) {
        console.log(value);

    $.getJSON('http://api.soundcloud.com/resolve?url=' + value + '&format=json&consumer_key=' + consumer_key, function(playlist) {
        alert(i + playlist.title);
    });
});
于 2012-09-08T12:04:23.507 回答
1

是的,在您的情况下,警报中的 id 将始终为 3 - 但由于 javascript 架构。

$.getJSON()方法是 的简写$.get({ format : 'JSON' }),作用如下:

  • 嘿 javascript,你能给我的 JSON 内容url吗?
  • 是的,伙计,但我有一些事情要做,我不能等到服务器回答 - 请告诉我你想让我用这些数据执行什么,并将它包装在一个函数中。同时,我将继续编写脚本,因为我需要淡出一些 div;
  • 好的javascript,这里是:function(playlist){ ... }

这意味着你的function(playlist){ ... }回调是在for循环结束后执行的——这就是为什么i总是 3。

解决方案?你需要一个闭包来让你的回调i在当前迭代中被注意到——这个主题并不简短,所以请参加精彩的John Resig 的交互式讲座

于 2012-09-08T12:17:16.680 回答