gpt4 book ai didi

jquery - 保存 Backbone.js 模型数据。数据发送不正确

转载 作者:行者123 更新时间:2023-12-03 22:59:51 24 4
gpt4 key购买 nike

我是 Backbone.js 新手,我正在尝试保存模型实例。我使用 django 作为我的服务器。

客户端代码:

var Song = Backbone.Model.extend({
defaults: {
name: 'New Song'
},
url: function() {
return window.location.href;
}

});

var song = new Song()
song.save()

csrfmiddlewaretoken 在发送数据之前正确设置。

我单步执行了内部调用的 jQuery $.ajax 函数Backbone.sync,发现模型对象包含正确的数据。

但是服务器收到的request.POST

POST:<QueryDict: {u'[object Object]': [u'']}>

而不是实际数据。知道我哪里出错了吗?

更新:我通过将 Backbone.emulateJSON 设置为 true 进行了快速修复。但根据 Backbone (0.9.2) 代码中的注释,它适用于旧服务器。我正在使用 Django 1.4.1。这是否意味着 django 1.4.1 不兼容?

更新 2:当我将 Backbone.emulateJSON 设置为 false 时,我在 Firefox 中收到以下错误,但在 chrome 中却默默失败。

   "[Exception... "Component returned failure code: 0x80460001 
(NS_ERROR_CANNOT_CONVERT_DATA)" nsresult: "0x80460001 (NS_ERROR_CANNOT_CONVERT_DATA)"

location: "JS frame :: http://localhost:8000/static/jquery.js :: <TOP_LEVEL> :: line 8214" data: no]"

我使用 jQuery 来实现 ajax,这是 Backbone 的首选,看来错误可能出在 jQuery 中。

更新 3:我通过用我自己的覆盖 Backbone.sync 使用的 $.ajax 解决了这个问题。这仍然是一个快速修复。

Backbone.js 版本:0.9.2

jQuery 版本:1.8.0。还尝试过 1.7.2。结果相同。

最佳答案

我遇到了类似的问题,通过一些侦探工作/运气我找到了它。问题是默认情况下 Backbone 将 POST 数据作为请求正文中的 JSON 编码字符串发送,而不是作为 request.POST QueryDict 的一部分。因此,要在这种情况下获取数据,您必须使用 python json 库并在 Django View 中调用 json.loads(request.body) 才能正确读取数据。

顺便说一句,设置 Backbone.emulateJSON = true; 起作用的原因是 Backbone 通过“遗留”机制将 JSON 发送到 Django,这使得它出现在 请求中.POST 查询字典。

关于jquery - 保存 Backbone.js 模型数据。数据发送不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204018/

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