Backbone model.save在服务器发送200时返回错误:好的

时间:2014-01-17 08:28:51

标签: backbone.js

我定义了以下Backbone模型:

var User = Backbone.Model.extend({
        url: "/login",
        contentType: "application/com.example.auth+json",

        defaults: {
            userName: '',
            password: ''
        },

        validate: function(attrs){
            if(!attrs.userName){
                return 'Please fill username field.'
            }
            if(!attrs.password){
                return 'Please fill password field.'
            }
        }
    });

我在Backbone.View中使用以下代码

// ... 
   initialize: function() {    
       this.model = new User();
       myUser = {
           userName: 'labuser1@example.com',
           password: 'abcd_1234',
       };
    }

    onSubmit: function() {

        this.model.save(myUser, {
            success: function () {
                alert('You are authenticated');
                Backbone.trigger('Authenticated', {source: 'LOGIN'});
            },
            error: function (model, error) {
                alert('Error: " + error);
            }
        });
    }

我从后端收到以下响应,没有响应数据只发送状态代码返回:

Request URL : https://server/login

Request Method:POST

Status Code:200 OK

但我正在打印'错误:[对象对象]'。尽管服务器成功验证了用户,但为什么它没有达到成功处理程序。如果需要,请告知如何在前端/后端修复此问题。

3 个答案:

答案 0 :(得分:11)

您可以使用此代码dataType: 'text'来修复它

...
this.model.save(myUser, {
    dataType: 'text',
    success: function () {
...

或通过将Content-type标头设置为application/json来修复服务器端。

答案 1 :(得分:1)

initialize更新为:

    initialize: function() {    
      var myUser = {
           userName: 'labuser1@example.com',
           password: 'abcd_1234',
       };
      this.model = new User(myUser);
    }

您需要在此处初始化model然后再进入 onSubmit功能,您可以直接保存它:

onSubmit: function() {

        this.model.save(null, {
            success: function () {
                alert('You are authenticated');
                Backbone.trigger('Authenticated', {source: 'LOGIN'});
            },
            error: function (model, error) {
                alert('Error: " + error);
            }
        });
    }

注意:model.save应该用于创建新模型并在后端保留它而不进行身份验证。你可能想为此做一个不同的ajax调用。

答案 2 :(得分:0)

如果您的回复中不包含任何内容,请确保在PUT(模型更新)的情况下返回状态204(无内容)而不是200(确定)。