2

出于某种原因 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;
},
4

2 回答 2

3

这是意料之中的。看看Model.Save 文档,它说错误回调将被调用,(model, xhr, options)因为它的参数。

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

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

编辑:

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

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

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

于 2013-08-09T16:38:03.427 回答
3

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

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

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

于 2013-08-09T16:36:54.123 回答