如果我这样做是为了争论:
$.when(
$.getJSON('http://myUrlOne/?format=json'),
$.getJSON('http://myUrlTwo/?format=json')
).then(function () {
// how can i merge the response from both json requests before processing them
});
这两个url都在twitter api上,但其中一个是关键字搜索,一个是常规用户时间轴调用。
我正在尝试修改一个twitter插件,通过搜索@username(在第二个json请求中)显示用户名时间轴(在第一个json请求中)和@username提及
请参阅我要修改的当前函数以调用2个URL并在处理之前合并数据:
$.getJSON(build_api_url(), function(data){
var tweets = $.map(data.results || data, extract_template_data);
tweets = $.grep(tweets, s.filter).sort(s.comparator).slice(0, s.count);
$(widget).trigger("tweet:retrieved", [tweets]);
});
这不起作用:
$.when(
$.getJSON(build_api_url(),
$.getJSON(build_user_url()
).done( function(json1, json2) {
var data = $.extend(json1, json2)
// json1 and json2 represent the returned json, so just combine them as needed here
var tweets = $.map(data.results || data, extract_template_data);
tweets = $.grep(tweets, s.filter).sort(s.comparator).slice(0, s.count);
$(widget).trigger("tweet:retrieved", [tweets]);
});
答案 0 :(得分:1)
$.when(
$.getJSON('http://myUrlOne/?format=json'),
$.getJSON('http://myUrlTwo/?format=json')
).then(function (a1, a2) {
// First get the two objects from json
// (you could check statusText in a1[1] if desired) :
var obj1 = JSON.parse(a1[2].responseText);
var obj2 = JSON.parse(a2[2].responseText);
// Then, if you want to "merge" them you can do this :
var obj = obj1;
for (var key in obj2) {
obj[key] = obj2[key]; // this will replace obj1[key] you have to know how you want to merge
}
// use obj
});
答案 1 :(得分:0)
我首先探索jQuery.extend()。类似于$.extend(json1, json2)
。
答案 2 :(得分:0)
您可能希望使用$.when().done()
这样的方法:
$.when(
$.getJSON('http://myUrlOne/?format=json'),
$.getJSON('http://myUrlTwo/?format=json')
).done( function(json1, json2) {
// json1 and json2 represent the returned json, so just combine them as needed here
});
当然,如果您需要处理请求中的失败,那么您需要使用$.when().then()
。你没有在你的例子中显示使用失败回调,这就是为什么我建议done()
而不是then()
。