This question already has answers here:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
(6个答案)
4年前关闭。
以下是我的代码,它们向具有主机78.154.17.70,端口8080和路径/csrftoken.json的Web服务器发出http请求。
我使用
我全局声明了两个变量
“ csrf”:“ ajbgajbgjabbjbjbab”标记值为“ ajbgajbgjabbjbjbab”
表示
现在,当我在
我需要在
我不知道如何全局获取tokenValue?
从第一个请求获得令牌后,这将发出第二个请求。
另外,请查看asynchronous programming。
(6个答案)
4年前关闭。
以下是我的代码,它们向具有主机78.154.17.70,端口8080和路径/csrftoken.json的Web服务器发出http请求。
我使用
request.get
从服务器获取数据。我能够以以下格式获取数据,该数据为Json data
: {
"apiVersion": "1.0",
"data": {
"csrf": "ajbgajbgjabbjbjbab"
}
}
我全局声明了两个变量
var CSRFTokenValue;
和var respJson;
。在request.get
中,我将这些变量用作:respJson
存储解析数据,而CSRFTokenValue
存储“ csrf”:“ ajbgajbgjabbjbjbab”标记值为“ ajbgajbgjabbjbjbab”
表示
CSRFTokenValue
将在其中存储“ ajbgajbgjabbjbjbab”。现在,当我在
CSRFTokenValue
内部登录request.get
时,它将给我“ ajbgajbgjabbjbjbab”,但是当我在外部登录时,它将给我undefined。我需要在
CSRFTokenValue
内的quesryString中使用request.post
来发布数据。我不知道如何全局获取tokenValue?
var request = require('request');
var CSRFTokenValue;
var respJson;
request.get('http://78.154.17.70:8080/csrftoken.json', function (e, res, body){
respJson = JSON.parse(body);
CSRFTokenValue = respJson.data.csrf;
console.log('GET success:' + CSRFTokenValue);
});
console.log('GET token Globaly:' + CSRFTokenValue);
request.post('http://78.154.17.70:8080/Login/post.json?_csrf=' + CSRFTokenValue, {
'name' : 'name',
'password' : 'pass'
}, function (res) {
console.log('success');
});
最佳答案
这是因为发出初始请求时,它是异步完成的。当您的请求在后台完成时,程序将右移到控制流中的下一个语句。请求完成后,将设置CSRFTokenValue
,但是您要在请求完成之前打印出该值,因此它是undefined
。
试试这个吧。
var request = require('request');
request.get('http://78.154.17.70:8080/csrftoken.json', function (e, res, body){
var respJson = JSON.parse(body);
var CSRFTokenValue = respJson.data.csrf;
console.log('GET success:' + CSRFTokenValue);
request.post('http://78.154.17.70:8080/Login/post.json?_csrf=' + CSRFTokenValue, {
'name' : 'name',
'password' : 'pass'
}, function (res) {
console.log('success');
});
});
从第一个请求获得令牌后,这将发出第二个请求。
另外,请查看asynchronous programming。
10-06 04:14