1

如果我为了争论而这样做:

$.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]);
  });
4

3 回答 3

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
});
于 2012-09-05T15:17:29.833 回答
0

我将从探索jQuery.extend()开始。类似的东西$.extend(json1, json2)

于 2012-09-05T15:18:55.810 回答
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().

于 2012-09-05T15:19:12.843 回答