Javascript 将额外数据传递到主干集合获取--返回未定义的数据?

Javascript 将额外数据传递到主干集合获取--返回未定义的数据?,javascript,ajax,backbone.js,express,Javascript,Ajax,Backbone.js,Express,假设我有一个名为index的主干路由,它从服务器获取一个集合: var characters = new App.Collections.Characters(); characters.fetch({ success: function(data) { var homeView = new App.Views.Home({ collection: new Backbone.Collection(data) });

假设我有一个名为index的主干路由,它从服务器获取一个集合:

var characters = new App.Collections.Characters();
    characters.fetch({
      success: function(data) {
        var homeView = new App.Views.Home({
          collection: new Backbone.Collection(data)
        });
        $('#content').html(homeView.render().el);
      }
    });
很简单吧?获取成功后,创建一个新视图,并用从服务器检索的数据填充该视图

这假设我只传递一个字符数组。在Express 3.0中:

res.send(characters.slice(counter, counter+2)); // array of 2 characters
现在,如果我要在两个字符之外包含一个字符,而不是传递一个对象:

res.send({ nonce: randomString, characters: characters.slice(counter, counter+2);
在执行以下操作时,我无法再访问字符或nonce:

  // the same fetch function from above
  success: function(data) {
    console.log(data.nonce);  // undefined
    console.log(data.characters); // undefined
  }
骨干收藏公司在幕后做些不光彩的事吗?为什么我不能从从服务器传递的集合获取的成功对象访问对象属性

更新: 以下是在第一种情况下向集合发送简单数组时的控制台输出:

下面是当我按照@matt2000的建议发送数据,然后在主干网中调用它,作为
data.models[0].attributes.characters


传递给成功回调的数据应该是一个对象数组。我想你的意思是:

res.send([{ nonce: randomString, characters: characters.slice(counter, counter+2]);
以及:


传递给成功回调的数据应该是一个对象数组。我想你的意思是:

res.send([{ nonce: randomString, characters: characters.slice(counter, counter+2]);
以及:


主干在引擎盖下有点神奇。将作为第一个参数传递给
success
回调的不是服务器提供的原始数据,而是解析的集合()

您可以覆盖集合的默认
parse
方法,以便从服务器的响应中获取数组

var Characters = Backbone.Collection.extend({
  url : //REST access point
  parse : function( response ) {
     this.nonce = response.nonce;
     // Anything returned by this function will be used as the first argument to
     // construct the collection.
     return response.characters;
  }
});
您现在可以在获取时直接使用characters实例,而不必使用它的结果创建新集合

var characters = new Characters();
characters.fetch({
  success: function( collection ) {
    var homeView = new App.Views.Home({
      collection: collection
    });
    $('#content').html(homeView.render().el);
  }
});

主干在引擎盖下有点神奇。将作为第一个参数传递给
success
回调的不是服务器提供的原始数据,而是解析的集合()

您可以覆盖集合的默认
parse
方法,以便从服务器的响应中获取数组

var Characters = Backbone.Collection.extend({
  url : //REST access point
  parse : function( response ) {
     this.nonce = response.nonce;
     // Anything returned by this function will be used as the first argument to
     // construct the collection.
     return response.characters;
  }
});
您现在可以在获取时直接使用characters实例,而不必使用它的结果创建新集合

var characters = new Characters();
characters.fetch({
  success: function( collection ) {
    var homeView = new App.Views.Home({
      collection: collection
    });
    $('#content').html(homeView.render().el);
  }
});

最好的办法是检查控制台是否有任何错误。然后检查网络请求,看看响应看起来如何。
success
回调的第一个参数只是集合本身,而不是服务器发送的数据。@Loamhoof,这才有意义。除了收集之外,我还有哪些选项可以获取服务器发送的数据?@twillightponyinc。也许可以尝试使用
parse
方法。如果您需要更深入地了解
响应
对象,我想您必须深入研究jQuery XHR方法。最好的办法是检查控制台是否有任何错误。然后检查网络请求,看看响应看起来如何。
success
回调的第一个参数只是集合本身,而不是服务器发送的数据。@Loamhoof,这才有意义。除了收集之外,我还有哪些选项可以获取服务器发送的数据?@twillightponyinc。也许可以尝试使用
parse
方法。如果您需要深入研究
响应
对象,那么我想您必须深入研究jQuery XHR方法。谢谢。这个方法对我有效,所以我接受这个答案。谢谢。这个方法对我很有效,所以我接受这个答案。