保存Backbone.js模型数据.数据未正确发送

Pra*_*mod 5 django ajax jquery 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()
Run Code Online (Sandbox Code Playgroud)

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

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

但是,request.POST服务器收到的是

POST:<QueryDict: {u'[object Object]': [u'']}>
Run Code Online (Sandbox Code Playgroud)

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

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

更新2:当我设置Backbone.emulateJSONfalse,我在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]"
Run Code Online (Sandbox Code Playgroud)

我正在使用jQuery作为Backbone首选的ajax,似乎错误可能在jQuery中.

更新3:我通过覆盖Backbone.sync使用的$ .ajax来解决它.它仍然是一个快速解决方案.

Backbone.js版本:0.9.2

jQuery版本:1.8.0.也试过1.7.2.结果相同.

Eta*_*tan 9

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

顺便说一下,设置Backbone.emulateJSON = true;工作的原因是因为Backbone通过"遗留"机制将JSON发送到Django,这使得它出现在request.POSTQueryDict中.