2016-04-13 5 views
0

Ich versuche, den Wert GetURL in der New_Token Funktion wieder aus der Funktion zu bekommen, so dass ich es verwenden kann. Ich denke mein Problem ist die request.onreadystatechange Linie (obwohl ich nicht sicher sein kann). GetURL ist außerhalb der Funktion nicht definiert.OnReadyStateChange Scoping Problem

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

Was geschieht zur Zeit? –

+0

Die Warnung für GetURL ist nicht definiert. – Learning2Prgrm

+0

Ihr Problem ist mit dem Programmablauf. Die 'request.send (...)' startet einen Hintergrund-Thread, der ** nach ** Ihrem 'alert (...)' Code endet. Sie sollten den 'alert (GetURL)' innerhalb der Methode einfügen, die ausgeführt wird, wenn der Server Ihre 'request.send()' antwortet. –

Antwort

0

Versuchen Sie, diese

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

Der alte Code erhält den richtigen Wert für "GetURL" in der New_Token Funktion. Ich versuche herauszufinden, wie GetURL global gemacht werden kann (oder zumindest zurückgegeben werden kann, damit ich außerhalb der Funktion darauf zugreifen kann). Ich entschuldige mich, wenn ich etwas verpasse, aber ich glaube nicht, dass Ihr Code auf dieses Problem reagiert. – Learning2Prgrm

+0

Meine respektvolle Entschuldigung für das Missverständnis Ihrer Frage. –