无法在 $.post 回调中设置作用域变量
Can't set scoped variable in $.post callback
我有以下类型的结构:
(function(){
var objects = [];
$('button.one').on('click', function(){
fetchObjects = function(objects) {
$.post("/fetchObjects")
.done(function(data){
objects = data;
console.log(objects.length);
});
}
fetchObjects(objects)
});
$('button.two').on('click', function(){
console.log(objects.length);
});
})();
您可以看到我有一个变量objects
是此函数的本地变量。最初它是空的。当我单击button.one
时,我希望使用来自某个 ajax 请求的返回值填充objects
。它似乎有效,但是当单击button.two
时,objects
变量仍然是一个空数组。
为什么 jQuery 回调中没有objects
?
我也尝试过这种方法,但结果相同:
function callback(data) {
facilities = data
}
$.post("/fetchObjects")
.done(function(data){
callback(data);
});
我在这里错过了什么?请不要告诉我将"对象"全局化。
我不知道
你为什么要将对象作为参数传递。我认为以下内容应该可以正常工作。如果您想实现其他目标,请告诉我。
(function(){
var objects = [];
$('button.one').on('click', function(){
fetchObjects = function() {
$.post("/fetchObjects")
.done(function(data){
objects = data;
console.log(objects.length);
});
}
fetchObjects()
});
$('button.two').on('click', function(){
console.log(objects.length);
});
})();
让我们稍微简化一下代码。你基本上有这个:
var objects = [];
fetchObjects = function(innerObjects) {
var data = ['a','b'];
innerObjects = data;
console.log(innerObjects.length);
};
fetchObjects(objects);
console.log(objects);
(为了清楚起见,我更改了另一个objects
变量的名称;即使它具有相同的名称,问题也是相同的。
调用该函数时,innerObjects
包含对objects
的引用,因此修改它也会更改原始数组。但是当你这样做时
innerObjects = data;
现在,您不是修改数组,而是用其他内容替换引用。 innerObjects
"点"到 data
而不是 objects
,原始变量保持不变。
要使其正常工作,您需要遍历data
数组(假设它始终是一个数组)并将内容逐个分配给objects
引用。这样,您将保留原始引用并修改原始数组。
var objects = [];
fetchObjects = function(innerObjects) {
var data = ['a','b'];
for( var i = 0; i < data.length; i++ ) {
innerObjects[i] = data[i];
}
console.log(innerObjects.length);
};
fetchObjects(objects);
console.log(objects);
或者,在您的实际代码中:
(function(){
var objects = [];
$('button.one').on('click', function(){
fetchObjects = function(objects) {
$.post("/fetchObjects")
.done(function(data){
for( var i = 0; i < data.length; i++ ) {
objects[i] = data[i];
}
console.log(objects.length);
});
}
fetchObjects(objects)
});
$('button.two').on('click', function(){
console.log(objects.length);
});
})();
相关文章:
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- 如何将多槽transclude作用域设置为指令作用域
- Node.js中的垃圾收集作用域-变量将保持设置状态多长时间
- 在AngularJS中对指令的隔离作用域设置新属性
- 设置Javascript函数的作用域问题
- 无法在 $.post 回调中设置作用域变量
- 为什么从指令中更改外部作用域需要 scope.$apply(),即使我将范围选项设置为 false
- angular,将变量设置为作用域名称
- 将作用域变量设置为ng repeat中的ng模型
- 如何以正确的方式从服务中设置作用域变量
- 使用this from函数在作用域上获取/设置角度变量
- AngularJS用作用域变量设置ng控制器
- 具有独立作用域的指令中的表单输入:如何将ngModel设置为正确的作用域
- 角度设置基于作用域中变量的动作
- AngularJS指令没有设置第二级作用域对象
- 在angularjs中设置作用域值等于数组元素
- AngularJS指令中的指令没有设置作用域值
- 可以为jquery.ajaxSetup()设置作用域吗?
- 如何在ng-repeat中设置作用域变量
- 如何在angularjs中设置作用域变量的默认值