2016-04-13 13 views
0

New_Token関数の値をGetURLに戻して、私が使用できるようにしようとしています。私は自分の問題がrequest.onreadystatechange行だと思う(私は確信が持てないが)。 GetURLは、関数の外部では未定義です。OnReadyStateChangeスコープの問題

var GetURL; 
var request = new XMLHttpRequest(); 
var path="https://ops.epo.org/3.1/auth/accesstoken"; 

request.onreadystatechange= function() {New_Token(GetURL);}; 

var encodedData = window.btoa("key:secret"); //encode consumer key and secret key 
request.open("POST", path, true); 
request.setRequestHeader("Authorization", encodedData); 
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
request.send('grant_type=client_credentials'); //send request to server, must include grant_type in payload or it won't work 
alert(GetURL); 

function New_Token(GetURL) { 
    if (request.readyState == "4") //Request finished and response is ready 
    { 
     if (request.status == "200") { 
      console.log(request.responseText); 
      var TheResponse = JSON.parse(request.responseText); 
      console.log(TheResponse); 
      var TokenValue = TheResponse.access_token; 
      console.log(TokenValue); 
      GetURL = ("?access_token=" + TokenValue); 
      console.log(GetURL); //this is the added string that needs to be concact. on to ALL OPS calls 

      return(GetURL); 
     } 
     else { 
      alert("Problem retrieving data"); 
      console.log(request.responseText); 
     } 
    } 
} 
+0

を試してみてください? –

+0

GetURLのアラートは未定義です。 – Learning2Prgrm

+0

問題はプログラムの流れにあります。 'request.send(...)'はあなたの 'alert(...)'コードの後に​​*バックグラウンドスレッドを開始します。サーバがあなたの 'request.send()'に答えるときに実行されるメソッドの中に 'alert(GetURL)'を入れてください。 –

答えて

0

現在何が起こっているこの

function New_Token(GetURL) { 
    if (request.readyState == 4 || request.readyState == "complete") 
    { 
     if (request.status == 200||request.status == 0) { 
      console.log(request.responseText); 
      var TheResponse = JSON.parse(request.responseText); 
      console.log(TheResponse); 
      var TokenValue = TheResponse.access_token; 
      console.log(TokenValue); 
      GetURL = ("?access_token=" + TokenValue); 
      console.log(GetURL); //this is the added string that needs to be concact. on to ALL OPS calls 
      return(GetURL); 
     } 
     else { 
      alert("Problem retrieving data"); 
      console.log(request.responseText); 
     } 
    } 
} 
+0

古いコードは、New_Token関数の "GetURL"の正しい値を取得します。私が把握しようとしているのは、GetURLをグローバルにする方法です(または少なくとも関数の外でアクセスできるように、少なくとも返されます)。私が何かを見逃していると私の謝罪ですが、私はあなたのコードがその問題に応答しているとは思わない。 – Learning2Prgrm

+0

あなたの質問を誤解していることに対する敬意を表します。 –