【问题标题】:Backbone Create主干创建
【发布时间】:2013-08-09 16:31:55
【问题描述】:

由于某种原因 this.collection.create() 返回了一个错误,但有趣的是,错误消息看起来像是我刚刚添加到我的集合中的模型。

this.collection.create({
    name: $('#big-input').val(),
    firstRemark: $('#small-input').val(),
    postedBy: window.user.displayName,
    twitterHandle: window.user.twittername,
    pictureUrl: window.user.profilePic

},{wait: true,    

  success: function(response){
     console.log("success");
     console.log(response)

  },
  error:function(err){
      console.log(err)

   }

});

这是我在 console.log(err) 之后得到的:

exports.newPost = function(req, res){
  console.log("GOT NEW TWEET REQUEST");
  var newPost = new Post(req.body)
  newPost.dateCreated = new Date();
  newPost.save();
  res.send(200);
};

感谢下面的答案,我能够打印出我的“真实”错误。如下所示,xhr.responseText 是“OK”,“status”是 200。为什么这个响应触发了成功但触发了错误?

我的收藏中也有一个 parse 方法

parse: function(response){
    this.page = response.page;
    this.perPage = response.perPage;
    this.total = response.total;
    this.noofpages =response.noofpages;

    return response.posts;
},

【问题讨论】:

  • 请求和响应的样子
  • 您的模型上有validateparse 方法吗?
  • @kalley 我的收藏有一个解析方法,编辑了我的答案
  • 您的服务器需要返回一个带有200 请求的响应正文。看这里:stackoverflow.com/a/14225337/832759

标签: javascript backbone.js


【解决方案1】:

这是意料之中的。看看the Model.Save documentation,它说错误回调将使用(model, xhr, options) 作为参数调用。

如果您想要响应的实际内容,您可以从第二个参数responseText 属性中获取它:xhr.responseText。 jquery 文档中有更多关于 jqXHR 元素的详细信息:http://api.jquery.com/jQuery.ajax/#jqXHR

你的成功回调的参数也不太对 - 它需要(model, response, options)

编辑:

不完全确定这是否是您的问题的原因,但您的服务器应该返回 200 状态代码和成功的模型 JSON。查看Backbone.Sync 文档。

通过查看代码,这在将wait: true 作为选项传递时看起来确实很重要,因为属性集通过服务器返回的属性进行了扩展。查看主干here 使用的options.success 函数,了解我的意思。如果您从服务器返回“OK”,看起来肯定会出现问题,但我不确定这是否正是您遇到的问题。

EDIT2:对我上面写的内容进行轻微更正:返回值通过Model.parse 传递。由于您已经定义了一个自定义解析函数,服务器应该返回可以使用它的东西,而不仅仅是模型的纯 JSON。

【讨论】:

  • console.log(xhr.responseText) 只是打印'OK'..这让我想知道为什么没有触发成功回调?
  • @GorkemYurtseven 我添加了一个可能的解释。不知道我是否正确。
【解决方案2】:

错误函数将接收 3 个参数,这些参数在主干.js 中的 wrapError 函数中定义

  model.trigger('error', model, resp, options);

因此,您的输出是正确的。您需要在错误函数中添加一个变量来捕获响应(第二个参数)并记录它以帮助您进行调试。

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多