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

标签 jquery ajax django backbone.js

我是 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/

相关文章:

javascript - 使用ajax在html中加载音频

javascript - 通过表单发送 anchor 标记值

Jquery 返回 false - 为什么?

javascript - 如何在单个页面上有多个 jQuery 插件实例?

javascript - 在就绪和 keyup 事件时运行函数

django - 将 django south 与一组不同的数据库凭据一起使用

python - View 和 urlpattern : problems with import?

javascript - 我怎样才能拥有一个表现得像 anchor 但又不是 anchor 的 HTML 元素?

java - 如何在 Wicket 6.x 中正确使用 CallBackScript

javascript - 使用 JavaScript 对 django 生成的表值求和