如何将初始参数传递给javascript函数

时间:2013-10-20 22:08:20

标签: javascript

我有一些简单的javascript函数可以与像这样的API进行交互登录:

    login: function(username, password) {
    var calledUrl = baseapi + "user/login/" + credentials;
    calledUrl.post(
        function (content) {
            /*console.log("success" + JSON.stringify(content, null, 4));*/
        },
        function (e) {
            console.log("it failed! -> " + e);
        },
        {
            "username": username,
            "password": password

        },
        {"Accept" : "application/json"}
    );
},

问题是,在URL中我必须传递一些凭据,它们看起来像这样:

var credentials = "?api_username=" + api_username + "&api_key=" + api_key;

现在这个变量被硬编码以进行一些测试,但当然它应该为每个使用该功能的人改变。我不想在每次请求时都要求它,在这种情况下,我只想要usernamepassword。我想在初始化过程中或者在调用任何内容时一劳永逸地要求它,然后在执行各种功能时记住它。

2 个答案:

答案 0 :(得分:1)

如果.login()是第一种通常需要凭据的方法,那么您可以将其作为该方法的必需参数,然后将凭证存储在对象中:

login: function(username, password, credentials) {
    // save credentials for use in other methods    
    this.credentials = credentials;
    var calledUrl = baseapi + "user/login/" + credentials;
    calledUrl.post(
        function (content) {
            /*console.log("success" + JSON.stringify(content, null, 4));*/
        },
        function (e) {
            console.log("it failed! -> " + e);
        },
        {
            "username": username,
            "password": password

        },
        {"Accept" : "application/json"}
    );
},

然后,在其他方法中,您可以使用this.credentials访问此用户的凭据。

如果还有其他方法也可以先调用并需要凭据,那么您也可以将凭据作为参数,或者您可以创建只建立凭据的.init()方法或你可以在这个对象的构造函数中使它成为一个参数。


您可能还需要修复此行:

 calledUrl.post(...)

因为calledUrl是一个字符串而字符串没有.post()方法,除非您使用某种第三方库添加一个。

答案 1 :(得分:1)

我建议您阅读JavaScript中的范围。如果没有更多解释你想要做什么,我会尝试这样的模式......

var app = {
  baseapi: 'http://some.url.com'

  /* assuming the api user/pass are different form the account trying to log in */
  ,api_username: ''
  ,api_key: ''

  ,username: ''
  ,userpass: ''

  ,get_creditialString: function() {
    return '?api_username=' + this.api_username + '&api_key=' + this.api_key;
  }
  ,init: function(){    
    // do something to prompt for username and password
    this.username = 'myUserName';
    this.userpass = 'supersecretpassword';

    this.login();
  }
  ,login: function() {
    var calledUrl = this.baseapi + "user/login/" + this.get_credentialString();
    calledUrl.post(
        function (content) {
            /*console.log("success" + JSON.stringify(content, null, 4));*/
        },
        function (e) {
            console.log("it failed! -> " + e);
        },
        {
            "username": this.username,
            "password": this.userpass
        },
        {"Accept" : "application/json"}
    );
  }
}
app.init();