另一篇关于在Javascript方法中调用变量的文章

Another post about calling variables inside Javascript methods

本文关键字:方法 Javascript 调用 变量 文章 一篇      更新时间:2023-09-26

是的,我知道有很多关于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文件中的数据,并试图在函数之外访问它,但它根本不起作用。老实说,我读过很多关于这个问题的类似问题,但都没有解决。我能做些什么来解决我的问题吗??请告诉我!非常感谢!

第二个警报将在第一个警报之前触发。这里的原因不是可变范围,而是JavaScript的异步特性。重新构造代码,以便适应异步工作方式。

尝试在第一个.then()返回dataval,添加第二个.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>