2013-10-20 77 views
1

我有一些簡單的JavaScript函數與像這樣的一個API互動登錄:如何初始參數傳遞給JavaScript函數

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。我想在初始化過程中或者在調用它時調用它,然後在執行各種函數時記住它。

+1

我不明白,究竟是什麼問題與您的代碼? –

+0

對不起,如果它不是很清楚,代碼的作品,但有一個硬​​編碼的參數,API的憑據。我有更多的這些功能,他們每個人都使用這個參數。我希望能夠在通話中記住這個參數,所以我不必一直輸入。 – Bastian

回答

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訪問此用戶的憑據。

如果還有其他方法也可以先調用並需要它們的憑據,那麼您可以爲這些憑證作爲參數,或者您可以創建一個只建立憑據的方法,或者可以創建它是這個對象的構造函數中的一個參數。


你可能還必須解決這一行:

calledUrl.post(...) 

因爲calledUrl是一個字符串,字符串沒有.post()方法,除非你正在使用某種形式的第三方庫的那增加一個。

+0

calledUrl.post($ – jacouh

+0

@jacouh - ?我不知道這事 - 這僅僅是OP的代碼,我不認爲這個問題的操作部分,雖然它看起來很奇怪,也許錯 – jfriend00

+0

是在calledUrl .POST確實奇怪,它來自名爲'abaaso'。 – Bastian

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(); 
+0

對不起,我的解釋確實很差。非常接近我所需要的,唯一的是我希望用戶調用一個特定的函數來設置證書,然後記住他們在其他函數的代碼中使用它們。 – Bastian

相關問題