【发布时间】:2017-01-11 22:24:13
【问题描述】:
我已经使用 Backbone.js 实现了一个简单的登录系统。
我正在尝试使用 HTTP POST 方法将用户名和密码传递给处理用户身份验证的控制器类。
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 请求轻松发送数据?
【问题讨论】:
-
您在哪里看到 Backbone 视图中有一个
type属性? -
您似乎将类属性与某些函数选项混淆了。
-
好吧,你肯定把
fetch选项对象与视图类属性混淆了。没有type选项可供查看。type是jQuery'sajax函数的一个选项,被Backbone在后台使用。
标签: javascript jquery backbone.js codeigniter-3