【问题标题】:Backbone model.save returning error while server sending 200:OK服务器发送 200 时主干模型保存返回错误:OK
【发布时间】:2014-01-17 08:28:51
【问题描述】:

我已经定义了以下主干模型:

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

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

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我添加了代码 dataType: 'text' 问题解决了。
    【解决方案2】:

    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 调用。

    【讨论】:

    • 您好 Niranjan,感谢您的快速回复。很抱歉错字,现在已经更正了。请再次查看我的代码。
    • 我正在按照您的回复中的说明进行操作,但我仍然遇到同样的错误。这可能是后端服务的问题吗?如果是的话,知道我们到底需要改变什么才能使其正常工作。
    • @tarun_telang 您的登录服务返回什么?
    • 服务不返回响应数据。如上所述,它只返回 HTTP 状态 200。
    • 对于返回 JSON 对象的服务,我在 Windows 8.1 中遇到问题。我能够看到 Backbone.model.save() 的成功回调在旧操作系统(所有浏览器的 Windows 7)中执行。当应用程序在任何浏览器上运行时,即使后端服务器将响应类型 Header 设置为 application/json,应用程序也会在 Windows 8.1 中一直等待。在尝试了保存 Backbone.Model 和分析的各种选项后,我发现添加 dataType: 'text' 然后将响应转换为 JSON.parse(response) 解决了我在 Windows 8.1 中遇到的问题。请更新您的体验?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2013-04-22
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多