Backbone.js发出`model.save()`调用的GET请求

时间:2012-03-17 22:42:55

标签: backbone.js coffeescript

我有一个Backbone应用程序,我在其中创建一个新模型并保存它。这是一段代码片段,带有调试,在CoffeeScript中:

newListing = new Listing
console.log "New?", newListing.isNew()
newListing.save creation, {
  wait: true
  success: (model, response) =>
    console.log "SAVED", model
    console.log "RESPONSE", response
}

为了进行调试,我还覆盖了Backbone.sync

oldSync = Backbone.sync
Backbone.sync = (method, model) ->
  console.log "Syncing:", method, model
  oldSync(arguments...)

通常,这很好用。我在控制台中得到了这个:

New? true
Syncing: create > Listing
SAVED > Listing
RESPONSE > Object

在网络检查员中,我看到:

listings POST 200 application/json

我还在我的(Rails)应用程序日志中看到了一个POST请求。

但是,在创建了一些列表后,我开始在控制台上看到以下行为:

New? true
Syncing: create > Listing
SAVED > Listing
RESPONSE [> Object, > Object, > Object, > Object, > Object, > Object]

其中每个Object是已保存在数据库中的列表。 Network Inspector和我的应用程序日志还表明Backbone对/ listing执行了GET请求。此外,第三行中已被“保存”的Listing是列表的客户端表示(没有服务器通常插入的一些其他详细信息)。

我无法找到这种行为的任何模式;有时,Backbone坚持在GET之后发送GET,并且在刷新之后它开始工作。有时它会一直运行直到我重新启动应用程序服务器很高兴探索任何建议!

[编辑]

好吧,经过一些调查后,看到我在fetch()集合上致电Listings后,Listing#save()开始这样做了。该问题仅出现在我的笔记本电脑上,该笔记本电脑正在运行Chrome Dev(v19)。在其他浏览器和旧版Chrome上,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

显然,这是一个特定于应用程序的问题。我的猜测是问题是服务器端。也许您的服务器端代码在创建后返回所有列表,而不仅仅是创建的列表。成功创建后,您的服务器应响应200 OK,并在响应正文中表示已创建的实体。