0

我正在使用 Express.js 应用程序开发 Backbone Node.js。在收到来自我的服务器的响应后,我试图触发一个函数,如下面的代码:

主视图.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');
}

用户模型.js

  ...  

, auth: function (options) {
     $.ajax({
          url: 'users/auth'
        , type: 'post'
     }, options);
})

应用程序.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')从这个函数打印句子。

4

1 回答 1

1

有两种调用方式$.ajax

  1. jQuery.ajax(url, settings)
  2. 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,如果您想避免意外覆盖urland 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);
于 2013-09-09T17:42:13.580 回答