gpt4 book ai didi

javascript - 为什么我的 Backbone.js 错误回调被调用,即使 Rails 应该返回成功响应?

转载 作者:数据小太阳 更新时间:2023-10-29 04:32:48 26 4
gpt4 key购买 nike

我正在使用 Backbone.js(版本 0.5.3)并且在 saving a model 时遇到了一些成功回调的问题。 .它没有运行,即使模型已成功保存在服务器上。

CoffeeScript :

console.log 'in switch_private'
console.log "private_entry attribute is currently #{@model.get('private_entry')}"
@model.save {'private_entry': true},
success: ->
console.log 'in success'

已编译的 Javascript:

console.log('in switch_private');
console.log("private_entry attribute is currently " + (this.model.get('private_entry')));
return this.model.save({
'private_entry': true
}, {
success: function() {
return console.log('in success');
}
});

控制台输出:

in switch_private
private_entry attribute is currently false
XHR finished loading: "http://localhost:3000/entries/235".

我正在从 Ruby on Rails 中的更新操作返回 head :ok

添加模型和响应参数,使其成为 success: (model, response) ->,没有任何区别。出了什么问题?

编辑:根据 Trevor Burnham 的建议,我添加了一个错误回调,它正在运行。那么,为了让 Backbone 认为保存成功,我应该从 Ruby on Rails 操作返回什么?目前我有 head :ok

编辑 2:这是我更新后的编译 Javascript:

var this_view;
this_view = this;
return this.model.save({
'private_entry': !(this.model.get('private_entry'))
}, {
success: function(model, response) {
return console.log('in success');
},
error: function(model, response) {
return console.log('in error');
}
});

这是 PUT 请求:

enter image description here

最佳答案

我遇到过这个。您不能只返回 head :ok 并使用 Backbone 的默认行为。默认的 Backbone.Sync 没有它。

首先,如果您在 create 操作中执行此操作,您将永远不知道您的 id 是什么,因此模型将无法稍后更新(你正在做的,因为“PUT”)。

其次,在您的update 操作中,如果您返回head :ok,模型将不知道数据是否真正同步,因此同步再次失败。但如果您没有 id 也没关系。

无论如何,你都需要在 body 中返回一些东西。

默认情况下,Rails 脚手架在更新 成功时返回head :ok。这与 Backbone 不相符。要修复它,请改为返回 JSON:

render json: @entity

(其中 @entity 是您在操作中的变量)

关于javascript - 为什么我的 Backbone.js 错误回调被调用,即使 Rails 应该返回成功响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com