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){ ... }した後の方法でコールバックが実行されることを意味します-これが常に3forである理由です。i

ソリューション?現在のイテレーションでコールバックに認識させるには、クロージャが必要です。トピックは簡潔ではないので、 JohnResigのすばらしいインタラクティブな講義を受講してください。i

于 2012-09-08T12:17:16.680 に答える