我正在使用Express.js app开发Backbone Node.js。我试图在接收到来自我的服务器的响应之后触发一个函数,如下面的代码:
mainView.js
...
user: null,
initialize: function () {
_.bindAll(this, 'registerSuccess', 'loginSuccess');
this.user = new userModel();
}
registerSuccess: function () {
this.user.auth({
success: this.loginSuccess
});
});
loginSuccess: function () {
console.log('loginSuccess');
}
userModel.js
...
, auth: function (options) {
$.ajax({
url: 'users/auth'
, type: 'post'
}, options);
})
app.js
var api = require('./routes/apiController');
app.post('/users/auth', api.userAuth);
apiController.js
exports.userAuth = function (req, res) {
return res.send( {
status: 200
});
}
我收到了回复:
但它不会打印此函数的console.log('loginSuccess')
句子。
答案 0 :(得分:1)
有两种方法可以拨打$.ajax
:
jQuery.ajax(url, settings)
jQuery.ajax(settings)
在第一种情况下,url
必须为字符串,而settings
是可选对象;在第二种情况下,settings
也是一个可选对象。您正在使用两个对象调用$.ajax
:
auth: function (options) {
$.ajax({
url: 'users/auth'
, type: 'post'
}, options);
}
由于第一个参数不是字符串,$.ajax
将使用第二个调用表单并完全忽略options
。您可能希望使用_.extend
来合并参数:
$.ajax(_({
url: 'users/auth'
, type: 'post'
}).extend(options));
或_.defaults
如果您想避免意外覆盖url
和type
:
$.ajax(_({
url: 'users/auth'
, type: 'post'
}).defaults(options));
或者,因为你只有两件事,只需手动填写:
options = _(options).clone(); // Avoid accidentally messing with the argument.
options.url = 'users/auth';
options.type = 'post';
$.ajax(options);