Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在backbone.js模型同步中合并多个jsonp请求? 我想要实现什么?_Javascript_Jquery_Ajax_Backbone.js - Fatal编程技术网

Javascript 如何在backbone.js模型同步中合并多个jsonp请求? 我想要实现什么?

Javascript 如何在backbone.js模型同步中合并多个jsonp请求? 我想要实现什么?,javascript,jquery,ajax,backbone.js,Javascript,Jquery,Ajax,Backbone.js,有一个问题,我正试图更新一个不错的詹金斯散热器应用程序所作的克莱顿伦格尔Zigich。它是一个backbone.js应用程序,使用其JSONPAPI获取jenkins主服务器的状态并显示作业状态。我想将此应用程序更改为从多个主控程序获取并显示多个作业的状态 我试过什么? 我尝试更新sync函数来执行两个jsonp请求,然后合并结果。可在此处找到原始文件: 我得到了什么 我希望我能够在网页中看到合并的结果,但是我只能看到其中一台服务器的结果。显示哪个服务器是随机的,这向我表明我的合并正在覆盖,而不

有一个问题,我正试图更新一个不错的詹金斯散热器应用程序所作的克莱顿伦格尔Zigich。它是一个backbone.js应用程序,使用其JSONPAPI获取jenkins主服务器的状态并显示作业状态。我想将此应用程序更改为从多个主控程序获取并显示多个作业的状态

我试过什么? 我尝试更新sync函数来执行两个jsonp请求,然后合并结果。可在此处找到原始文件:

我得到了什么 我希望我能够在网页中看到合并的结果,但是我只能看到其中一台服务器的结果。显示哪个服务器是随机的,这向我表明我的合并正在覆盖,而不是合并


我对javascript一窍不通,所以我甚至不知道下一步该去哪里。也许u.extend部分实际上更新了模型?如果是这样的话,有没有其他方法来实现我想要的呢?

如果模型具有相同的结构,您可以创建单独的模型并在同一个模型上显示它们。我建议您创建一个包含所有模型的数组,然后将它们传递给集合。如果您的模型完全不同,则将它们传递给视图,并在视图中具有一些逻辑来处理所有模型


本网站()提供了一些关于模型和集合的优秀教程,以防您没有太多地使用主干。

无法保证您的哪些请求会首先完成。如果B在A之前完成,它将把
jsonB
合并到空的
joinedJson
(只需将其设置为
jsonB
),然后当A完成时,它将用
jsonA
覆盖
joinedJson


这不是你唯一的问题;返回
joinedJson
时,不能保证两个请求都已完成;您将异步请求视为同步请求。

既然您仍在发出单独的请求,为什么不为您的服务器创建不同的模型并避免覆盖同步?如果我创建单独的模型,我仍然可以在同一页上显示它们吗?
sync: function(method, model, options) {

      var paramsA = _.extend({
          type: 'GET',
          dataType: 'jsonp',
          processData: true,
          url: "http://serverA:8080/api/json?jsonp=?"
      }, options);
      var a = $.ajax(paramsA);


      var paramsB = _.extend({
          type: 'GET',
          dataType: 'jsonp',
          processData: true,
          url: "http://serverB:8080/api/json?jsonp=?"
      }, options);
      var b = $.ajax(paramsB);

      function MergeJobs(o, ob) {
        for (var z in ob.jobs) {
           o.jobs.push(ob.jobs[z]);
        }
        return o;
      }

      var joinedJson = []
      a.done(function(jsonA) {
        joinedJson = jsonA;
      });
      b.done(function(jsonB) {
        MergeJobs(joinedJson, jsonB);
        //joinedJson = jsonB;
      })
      return joinedJson;

  },