无法调用成功功能

时间:2013-09-09 11:03:29

标签: node.js backbone.js express

我正在使用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
    });

}

我收到了回复:

enter image description here

但它不会打印此函数的console.log('loginSuccess')句子。

1 个答案:

答案 0 :(得分:1)

有两种方法可以拨打$.ajax

  1. jQuery.ajax(url, settings)
  2. jQuery.ajax(settings)
  3. 在第一种情况下,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如果您想避免意外覆盖urltype

    $.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);