Javascript 为什么不';t我有权访问在上限范围中创建的变量
出于某种原因,我正在努力使用这个js代码。我无法访问ajax函数中的变量。 我试图通过将“格式化”变量放在ajax函数上方来解决这个问题,但我无法从内部访问它。我如何解决这个问题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
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这对您有帮助吗?