gpt4 book ai didi

javascript - 即使在响应代码 200 之后 Backbone 同步错误

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

你好 Backbone 忍者,

这是我第一次使用 Backbone - 所以请原谅我的“菜鸟”。在我的功能(更大应用程序的一部分)中,我有一个 Backbone View vA,由模型 mA 支持(应该是),服务器端在 Spring MVC 中,用@RequestBody 和@ResponseBody 注释了 Spring Controller 方法。我让 Jackson 在 Spring 上运行良好。

现在,在应用程序中,

Backbone.Model
|_ BaseModel (custom base model for our app)
|_ mA (my model)

mA 有自己的端点,它在发出 PUT 请求时成功地调用了它,即当我从 View vA 的提交按钮事件处理程序调用 save() 时,如下所示:

这个.model.save({

            success : function(){

alert('Request submitted successfully');


},

error : function(){
alert('Something awful happened.');
}

});

我们的 BaseModel 具有以下内容:

define([], function() {



window.BaseModel = Backbone.Model.extend({
......


});

onSyncError : function(model, response) {
switch (response.status) {
case 403:
[...//some more code ]
default:
alert(bundle.getDefault('HTTP_RESP_OTH') + response.status);
}
},

onSyncSuccess : function(model, response) {
alert('Sync done! ');
},

sync : function(method, model, options) {
options.error = this.onSyncError;
Backbone.sync.call(this, method, model, options);
....//some more stuff.
},

}

Spring Controller 方法:

@RequestMapping(value="/resource/xyz/{id}.json", method = RequestMethod.PUT, consumes     = {"application/json"}
, produces = {"application/json"})
@ResponseBody
public Map<String,String> methodX(@RequestBody XyzDTO xyzDTO){
....
map.put("msg", "success");

return map;
}

此外,就在我进行保存调用之前,我修改了一些模型属性,因为服务器端 DTO 具有不同的结构,如下所示:

this.model.unset("abc",{ silent: true });
this.model.set( { abc: {id : "2",xyz:{ ... //more code } );

问题是,调用 save() 会生成一个 PUT 请求并成功调用 Spring 端点处理程序,但我得到的响应代码是 200(这是我所期望的),但是当我使用 Firebug 跟踪调用时,它会进入 onSyncError 方法并给我一条错误消息(因为其中的“默认”情况)。

Backbone 文档说:“返回 JSON 响应时,发送已被服务器更改并需要在客户端更新的模型属性”。好吧,我不需要在客户端更新模型,它是最后一个屏幕,我只需要告诉用户成功/错误和将他重定向到主页/仪表板。

我又读了一些,似乎代码 200 是因为响应不够——可能存在导致同步失败的 JSON 解析错误。

我检查了 Firebug 中的响应,响应 JSON 看起来像 {"msg":"Success"}。

那么,可能出了什么问题?

最佳答案

Backbone.Model.save() 期望服务器的响应是模型值的更新哈希值。如果您的响应是 {"msg":"Success"} 类型,Backbone 可能无法与您的模型同步。基本上,它将您的 HTTP 200 JSON 响应解释为模型的属性,并尝试相应地同步模型。

您可以尝试 1) 让您的 Spring Controller 路径返回一个 JSON 化的模型响应,2) 返回一个带有空响应主体的普通 200 或 3) 编写自定义 parse方法查找具有 {"msg":"Success"} 格式的响应并以不同方式响应。

关于javascript - 即使在响应代码 200 之后 Backbone 同步错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16965065/

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