2016-04-13 7 views
0

Я пытаюсь получить значение GetURL в функции New_Token обратно из функции, чтобы я мог ее использовать. Я думаю, что моя проблема - это линия request.onreadystatechange (хотя я не могу быть уверен). GetURL не определено вне функции.OnReadyStateChange Scoping Issue

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 (...)'. Вы должны поместить 'alert (GetURL)' внутри метода, который выполняется, когда сервер отвечает на ваш 'request.send()' –

ответ

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

. Старый код получает правильное значение для «GetURL» в функции New_Token. Я пытаюсь выяснить, как сделать GetURL глобальным (или, по крайней мере, вернуть, чтобы я мог получить доступ к нему за пределами функции). Мои извинения, если я что-то упускаю, но я не верю, что ваш код отвечает на эту проблему. – Learning2Prgrm

+0

Мои почтительные извинения за непонимание вашего вопроса. –