Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript OnReadyStateChange作用域问题_Javascript_Ajax_Api_Xmlhttprequest_Onreadystatechange - Fatal编程技术网

Javascript OnReadyStateChange作用域问题

Javascript OnReadyStateChange作用域问题,javascript,ajax,api,xmlhttprequest,onreadystatechange,Javascript,Ajax,Api,Xmlhttprequest,Onreadystatechange,我试图从函数中获取New_Token函数中GetURL的值,以便使用它。我想我的问题是请求.onreadystatechange行(尽管我不能确定)GetURL在函数外部未定义 var GetURL; var request = new XMLHttpRequest(); var path="https://ops.epo.org/3.1/auth/accesstoken"; request.onreadystatechange= function() {New_Token(GetURL);}

我试图从函数中获取
New_Token
函数中
GetURL
的值,以便使用它。我想我的问题是
请求.onreadystatechange
行(尽管我不能确定)
GetURL
在函数外部未定义

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);
        }
    }
}
试试这个

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);
        }
    }
}

旧代码在New_Token函数中获取“GetURL”的正确值。我想弄清楚的是如何使GetURL全局化(或者至少返回GetURL以便我可以在函数外部访问它)。如果我遗漏了某些内容,我深表歉意,但我不相信您的代码会对该问题做出响应。我为误解您的问题深表歉意。当前发生了什么?GetURL的警报未定义。您的问题在于程序流。
request.send(…)
启动一个后台线程,该线程在发出
警报(…)
代码后终止。您应该将
警报(GetURL)
放在服务器响应您的
请求时执行的方法中。send()