Javascript 为什么不';t我有权访问在上限范围中创建的变量

Javascript 为什么不';t我有权访问在上限范围中创建的变量,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,出于某种原因,我正在努力使用这个js代码。我无法访问ajax函数中的变量。 我试图通过将“格式化”变量放在ajax函数上方来解决这个问题,但我无法从内部访问它。我如何解决这个问题 angular.module('ireg') .controller("compoundSearchController", function(){ var vm = this; vm.searchText = "Enter your search here..."; vm.compounds

出于某种原因,我正在努力使用这个js代码。我无法访问ajax函数中的变量。 我试图通过将“格式化”变量放在ajax函数上方来解决这个问题,但我无法从内部访问它。我如何解决这个问题

angular.module('ireg')
.controller("compoundSearchController", function(){
    var vm = this;
    vm.searchText = "Enter your search here...";
    vm.compounds = getJSON();

    function getJSON(){
        var formatted = "initial";  

        console.log(formatted); // equals initial

        $.ajax({url: "http://localhost:8080/ireg/app/php/returnAllCompounds.php", success: function(result){
            formatted = jQuery.parseJSON( result );
            console.log(formatted); //equals the correct object
        }})

        console.log(formatted); // equals initial
        return formatted;
    }

    console.log(vm.compounds); // equals initial

});

AJAX调用的异步行为是实际行为和预期行为之间差异的原因

将代码更新为

var formatted = "initial";  

$.ajax({url: "http://localhost:8080/ireg/app/php/returnAllCompounds.php", success: function(result){
    formatted = jQuery.parseJSON( result );
    vm.compounds = formatted;
}})

您无法在它之外获得ajax调用的响应
success
,因为它们本质上是
异步的
。您需要使用它们的回调来获得类似于
成功
的结果,或者您也可以使用
。然后
函数,该函数在ajax调用得到解决时获得调用

注意

不要将jQueryAjax与AngularJS混为一谈,那样会弄乱
digest
循环,您需要手动强制执行,请使用
$http

更新

下面是angular版本
$。ajax

    $http.get("http://localhost:8080/ireg/app/php/returnAllCompounds.php")
    .success(function(result){
        formatted = jQuery.parseJSON( result );
        console.log(formatted); //equals the correct object
    }});

()正如您在ajax函数外部看到的,变量仍然是初始值?是否有超出您所相信的代码范围的内容?我只在这里引用它。我们再次尝试在收到AJAX响应之前访问“格式化”。如果在ajax回调函数中移动console.log,您将能够根据屏幕截图看到更新的值,即从第14行到第12行。@Chris Chevalier这对您有帮助吗?