是的,我知道有很多很多很多关于Javascript变量的帖子以及如何正确访问它们及其范围等等。但是,我仍然无法弄清楚我的问题,即使花了一个几个小时试图用多个StackOverflow帖子和其他文章修复它。这是我的代码,因为到目前为止,让我们说part2.js:
var dataval = "";
callCgiFile().then(function(data) {
dataval = data;
alert(dataval); //ALERTS data PROPERLY
});
alert(dataval); //DOESNT ALERT data at all
我基本上有另一个Javascript文件,比如part1.js,如下所示:
function callCgiFile() {
return $.get('somecgifile.cgi');
}
并在我的part2.js文件中调用该函数,如图所示。我正在访问CGI文件中的数据,并尝试在函数外部访问它,但是,它根本不起作用。我老老实实地读过许多关于这个问题的其他类似问题,但没有一个问题对我有用。有什么办法可以解决我的问题吗?请告诉我!非常感谢你!
答案 0 :(得分:0)
第二个警报将在第一个警报之前触发。 这里的原因不是变量范围,而是JavaScript的异步性质。 重构您的代码,以便您适应异步方式。
答案 1 :(得分:0)
首先尝试返回dataval
.then()
,然后在
.then()
来处理dataval
var dataval = "";
function callCgiFile() {
return $.get("https://gist.githubusercontent.com/guest271314/"
+ "6a76aa9d2921350c9d53/raw/"
+ "1864137bfd2eb62705bd0e71175048a28b3253e6/abc.txt");
}
callCgiFile()
.then(function(data) {
dataval = data;
alert(dataval); //ALERTS data PROPERLY
// return `dataval` at first `.then`
return dataval
})
// do stuff with `dataval` within second `.then`
.then(function(data) {
alert(dataval)
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
&#13;