我已经使用Backbone.js实现了一个简单的登录系统。
我正尝试使用HTTPPOST方法将用户名和密码传递给处理用户身份验证的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://<?php echo gethostname(); ?>/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();
时,它会阻止在单击链接(Preventing full page reload on Backbone pushState)时重新加载页面,尽管页面重新加载阻止了预期的目标行为,但POST请求似乎成功地传递到了后端。
我们如何使用Backbone.js的POST请求轻松发送数据?
1条答案
按热度按时间h5qlskok1#
您使用的是
this.model.fetch();
,它用于检索数据,默认情况下,它发出GET请求,并且不发送正文或查询字符串中的任何数据。当试图找到选项和函数时,使用documentation。Backbone source code也很短,很容易遵循。
快速修复
使用保存
要强制执行POST请求,例如,如果模型在您已登录时设置了
ìd
,并且只想再次验证登录,请使用type
选项以避免在 Backbone 网确定这是更新而不是创建调用时发出PUT
或PATCH
请求。传递给
save
、fetch
、create
和destroy
的选项(所有这些选项都使用Backbone.sync
)也会传递给jQuery'sajax
函数。现实的解决方案
首先,don't generate JS with PHP。
然后,在
Session
模型中创建一个函数来处理登录。您甚至可以完全避免使用Backbone REST函数,因为它实际上并不适合登录请求的用例。使用一个模型是很有用的,因为它提供了通常的Backbone事件,并且它可以很好地与插件一起工作,比如在登录表单视图中的双向绑定。但是调用
save
到 login 并不清楚它应该做什么。这就是为什么我们应该为Session
模型提供一个清晰的API。然后登录:
我个人使用backbone-session插件来保存
localStorage
中的authtoken
。它提供了一个很好的开箱即用的API,并使用save
和fetch
来与localStorage
同步。为什么要自定义
ajax
调用?Backbone提供了
save
,以便根据REST原则将attributes
与服务器同步,这为不需要ID或进行PUT/PATCH请求的login
服务增加了大量开销。你经常会和 Backbone 战斗。
更多信息
$el
andel
and what's caching jQuery objects?