当前位置:  开发笔记 > 编程语言 > 正文

使用Backbone.js的POST方法发送数据

如何解决《使用Backbone.js的POST方法发送数据》经验,为你挑选了1个好方法。

我使用Backbone.js实现了一个简单的登录系统.

我试图使用HTTP POST方法将用户名和密码传递给处理用户身份验证的Controller类.

public function sessions() {
    if ($this->input->server('REQUEST_METHOD') == 'POST') {
        $this->login();
    } elseif ($this->input->server('REQUEST_METHOD') == 'GET') {
        $this->index();
    } elseif ($this->input->server('REQUEST_METHOD') == 'DELETE') {
        $this->session->sess_destroy();
        $this->index();
    }
}

Backbone.js代码段:

$(document).ready(function() {

    var Session = Backbone.Model.extend({
        url: function() {
            var link = "http:///reddit/index.php/welcome/sessions";
            return link;
        },
        defaults: {
            username: null,
            password: null
        }
    });

    var model = new Session();

    var DisplayView = Backbone.View.extend({
        el: ".complete",
        model: model,
        type: 'POST',
        initialize: function() {
            this.listenTo(this.model, "sync change", this.gotdata);
        },
        events: {
            "click #signin": "getdata"
        },
        getdata: function(event) {
            event.preventDefault();
            var username = $("input#username").val();
            var password = $("input#password").val();
            this.model.set({ username: username, password: password });
            this.model.fetch();
        },
        gotdata: function() {
            console.log(this.model.get('username'));
            console.log(this.model.get('password'));
            $("#base-nav").load(location.href + " #base-nav");
            $("#signin-form").load(location.href + " #signin-form");
        }
    });

    var displayView = new DisplayView();
});

type当前使用了属性来定义HTTP方法类型POST.但这似乎不起作用,因为只有使用开发人员控制台才能观察到GET请求.

需要注意的是,当我删除event.preventDefault();时会在单击链接时阻止页面重新加载(防止Backbone pushState上的完整页面重新加载),尽管页面重新加载阻止了预期的目标行为,但POST请求似乎已成功传递到后端.

我们如何使用Backbone.js的POST请求轻松发送数据?



1> Emile Berger..:

您正在使用this.model.fetch();哪个用于检索数据.它默认发出GET请求,不会在正文或查询字符串中发送任何数据.

在尝试查找选项和功能时,请使用文档.该骨干网的源代码也短,易于遵循.

快速解决

使用保存

this.model.save();

要强制执行POST请求,例如,如果模型ìd在您已登录时具有集合并且只想再次验证登录,请使用该type选项以避免PUTPATCH请求Backbone确定它是更新而不是创建调用.

this.model.save(null, { type: 'POST' });

传递给选项save,fetch,createdestroy,所有这些使用Backbone.sync,也传递给jQuery的ajax功能.

现实解决方案

首先,不要用PHP生成JS.

然后,在Session模型中创建一个函数来处理登录.您甚至可以完全避免Backbone REST功能,因为它不适合登录请求的用例.

使用模型很有用,因为它提供了常见的Backbone事件,并且它适用于插件,例如登录表单视图中的双向绑定.但调用save登录并不清楚什么应该做的.这就是为什么我们应该为Session模型提供清晰的API .

var Session = Backbone.Model.extend({
    urlRoot: "http://example.com/reddit/index.php/welcome/sessions",
    defaults: {
        username: null,
        password: null
    },

    // hide the login complexity inside a function
    login: function(options) {
        // for a really simple login, this would be enough
        return this.save(null, { type: 'POST' });

        // for anything more complex, make a custom call.
        return Backbone.ajax(_.extend({
            url: this.url(),
            method: "POST",
            data: this.attributes,
            dataType: "json",
        }, options));
    },

    // provide other functions for a clear and simple to use API.
    logout: function(){ /*...*/ },
    isAuthenticated: function(){ /*...*/ }
});

然后登录:

var session = new Session();

// in the view
render: function() {
    // caching jQuery object and uses the view's `$` function to scope
    // the search to the view element only.
    this.$username = this.$("input#username");
    this.$password = this.$("input#password");
    return this;
},
getdata: function(){
    session.set({
        username: this.$username.val(),
        password: this.$password.val(),
    });
    session.login({
        context: this,
        success: this.onLoginSuccess
    });
}

我个人使用的骨干会话插件保存在auth tokenlocalStorage.它提供了一个很好的API开箱即用,并使用savefetch同步localStorage.

为什么要定制ajax通话?

Backbone提供了根据REST原则与服务器save同步attributes,这为login不需要ID或发出PUT/PATCH请求的服务增加了大量开销.

你经常会最终与Backbone作斗争.

更多信息

是什么区别$elel什么的缓存jQuery的对象?

使用Backbone.session创建帐户服务

如何强制POST请求?

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有