Backbone PUT发送数据www-form-urlencoded而不是application / json

时间:2014-06-10 15:18:40

标签: backbone.js backbone-model

我对骨干网很新,它是如何工作的,并继承了一堆代码,但我根本无法解决这个问题:

我有一个用户模型:

var User = Backbone.Model.extend({
    idAttribute: 'username',
    defaults: {
        username: "",
        email: "",
        roles : [],
        password: ""
    }

});

var Users = Backbone.Collection.extend({
    model: User,
    initialize: function(args, options) {
        if (options && options.dialog) {
            this.dialog = options.dialog;
        }
     },

    parse: function(response) {
        if (this.dialog) {
            this.dialog.populate(response);
        }
       return response;
    },

    url: function() {
        var segment = AdminUrl + "/users";
        return segment;
    }
});

然后在我看来我正在做的其他地方:

user.save({username: $newtarget.val()},null);

或     user.save();

PUT被触发到正确的URL,但每次触发它都会发送数据

Content-Type    application/x-www-form-urlencoded; charset=UTF-8

但我的Jersey端点接受application / json

我读到的每个地方人们都在努力设置urlencoded数据,但我的问题是反过来的!

参数作为url params发送:

 username=admin&email=&password=admin&roles%5B%5D=ROLE_USER&roles%5B%5D=ROLE_ADMIN&id=1

=== EDIT ===

如果我强制使用内容类型和数据:

    user.save({}, {data: JSON.stringify(user.attributes),contentType: "application/json"});

看跌期权很好,很奇怪。

1 个答案:

答案 0 :(得分:1)

Backbone.emulateJSON = false;

由于某种原因

true

来自文档

  

启用emulateJSON以支持无法处理的旧服务器   直接应用/ json请求...将身体编码为   application / x-www-form-urlencoded而不是将模型发送到   形成param命名模型。

http://backbonejs.org/docs/backbone.html