django - Backbone.js 发布 500 错误

标签 django backbone.js tastypie

有谁知道如何将 Post 的 ContentType 指定为 json/application? 我以为我是,而主干默认情况下是这样做的,但从它说它正在获取纯文本(见评论)这一事实来看,我想我需要找出另一种方式来指定它。

我正在使用 Backbone.js 并且我正在尝试向不再只读的 TastyPie API 发送 POST 请求,并且当我尝试创建模型并对其进行 .save() 时收到 500 错误。这是我在此处找到的用于同步的代码片段:
http://documentcloud.github.com/backbone/docs/backbone.html#section-124

   Backbone.sync = function(method, model, options){
        var type = methodMap[method];
        var params = _.extend({
        type: type,
        dataType: 'json'
        }, options);

        if (!params.url){
        params.url = getUrl(model) || urlError();
        }

        if (Backbone.emulateJSON){
        params.contentType = 'application/json';
        params.data = params.data ? {model: params.data} : {};
        }

        if (Backbone.emulateHTTP){
        if(type === 'PUT' || type === 'DELETE'){
           if (Backbone.emulateJSON) params.data._method = type;
           params.type = 'POST';
           params.beforeSend = function (xhr){
               xhr.setRequestHeader('X-HTTP-Method-Override', type);
            };
         }
         }

        if (params.type !== 'GET' && ! Backbone.emulateJSON){
        params.prorcessData = false;
        }

        return $.ajax(params);
        };





    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
            o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
        });
        return o;
    };

    $(function() {
        $('form').submit(function() {
        var dict = $('form').serializeObject();
        var new_task = new Backbone.Model({
        date: toString(dict.date),
        name: toString(dict.name),
        priority: toString(dict.priority)});
        console.log("new_task =" + new_task);
         new_task.save();
        console.log(dict);

        return false;
        });

    });


    });

最佳答案

尝试设置 Backbone.emulateJSON = true;在你的代码中。

如果设置为 true,则设置 contentType到'application/json',这就是你要找的。

你只需要设置一次这个变量,所以一个好地方就在你的表单提交代码的正上方

$(function() {
    Backbone.emulateJSON = true;
    $('form').submit(function() {
        ...

关于django - Backbone.js 发布 500 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869312/

相关文章:

django - 使用跨关系的字段查找在 django 模型上进行链式过滤和排除

javascript - 如何检查是否存在 backone 回调?

jquery - Backbone.js + KendoUI - 使用网格进行路由、 View 和结构化

html - 在 Django 中发送 HTML 电子邮件

mysql - 使用 Django 和转换将大型 CSV 文件加载到 MySQL

python - 使用 Django 信号传递附加属性

javascript - 获取后新保存的 Backbone 模型未出现在集合中

django - 如何在 Django 项目中的 Tastypie 中实现登录模块

django - 如何使用 OAuth2 创建用户?

django - 通过 django social auth 和 tastypie 对 Backbone 应用程序进行身份验证