将两个JQuery.Map合并为一个?
我正在给spotify Web服务打电话,在我的个人应用程序中搜索艺术家和曲目 问题是我想在一个对象中显示两个不同的结果 这可能吗 还是我应该用另一种方式?(那样的话,让我走上正轨) 也许我应该对Web服务进行嵌套调用?(请编写一些代码,我自己也尝试过,但我真的不知道如何正确地调用) 用于可读性和演示的JSFIDLE: 代码如下将两个JQuery.Map合并为一个?,jquery,json,jquery-ui,merge,Jquery,Json,Jquery Ui,Merge,我正在给spotify Web服务打电话,在我的个人应用程序中搜索艺术家和曲目 问题是我想在一个对象中显示两个不同的结果 这可能吗 还是我应该用另一种方式?(那样的话,让我走上正轨) 也许我应该对Web服务进行嵌套调用?(请编写一些代码,我自己也尝试过,但我真的不知道如何正确地调用) 用于可读性和演示的JSFIDLE: 代码如下 function GetTracks(request, response) { $.get("http://ws.spotify.com/search/
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 ...//
}
});
});
使用autocomplete时,最好保留一个本地缓存变量来存储结果。您可以使用相同的缓存组合曲目和艺术家搜索结果,如下所示:
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);
}
}
});
});
如果响应函数被调用两次,Autocomplete似乎不会抱怨