2

個人用アプリケーションでアーティストとトラックを検索するために、Spotify Web サービスを呼び出しています。

問題は、2 つの異なる結果を 1 つのオブジェクトに表示したいということです。

これは可能ですか?

または、別の方法でアプローチする必要がありますか?(その場合、私を軌道に乗せてください)。

多分私はウェブサービスへのネストされた呼び出しを行うべきですか?

読みやすさとデモのための Jsfiddle: http://jsfiddle.net/a97Ys/

以下のコード

function GetTracks(request, response) {
        $.get("http://ws.spotify.com/search/1/track.json", {
            q: request.term
        }, function (data) {
            response($.map(data.tracks.slice(0, 5), function (item) {
                return { label: item.name, by: item.artists[0].name, category: "Track" };
            }));
        });    
}

function GetArtist(request, response) {
    $.get("http://ws.spotify.com/search/1/artist.json", {
        q: request.term
    }, function (data) {
        response($.map(data.artists.slice(0, 5), function (item) {
            return { label: item.name, by: "", category: "Artist" };
        }));
    });
}

この関数は私が問題を抱えているものです:

$(function () {
    $("#ListenToInput").catcomplete({
        delay: 0,
        source: function (request, response) {           
            //...Combine two maps and return one object ...//
        }
    });
});
4

1 に答える 1

1

オートコンプリートを使用している場合、ローカル キャッシュ変数を保持して結果を保存すると便利です。同じキャッシュを使用して、トラックとアーティストの検索結果を次のように組み合わせることができます。

var cache = {};

function GetTracks(request, response) {
    $.get("http://ws.spotify.com/search/1/track.json", {
        q: request.term
    }, function (data) {
        $.merge(cache[request.term], 
        $.map(data.tracks.slice(0, 5), function (item) {
            return {
                label: item.name,
                by: item.artists[0].name,
                category: "Track"
            };
        }));
        response(cache[request.term]);
    });
}

function GetArtist(request, response) {
    $.get("http://ws.spotify.com/search/1/artist.json", {
        q: request.term
    }, function (data) {
        $.merge(cache[request.term], 
        $.map(data.artists.slice(0, 5), function (item) {
            return {
                label: item.name,
                by: "",
                category: "Artist"
            };
        }));
        response(cache[request.term]);
    });
}

$(function () {
    $("#ListenToInput").catcomplete({
        delay: 0,
        source: function (request, response) {
            if (cache[request.term]) {
                return response(cache[request.term]);
            } else {
                cache[request.term] = [];
                GetTracks(request, response);
                GetArtist(request, response);
            }
        }
    });
});

応答関数が 2 回呼び出されても、オートコンプリートは文句を言わないようです。

http://jsfiddle.net/jk9s2/

于 2013-09-03T19:59:14.887 に答える