javascript数组引用和回调函数
我不懂的东西我觉得解释起来很长,所以请耐心听我说。我的页面中有以下incude js:javascript数组引用和回调函数,javascript,arrays,reference,callback,Javascript,Arrays,Reference,Callback,我不懂的东西我觉得解释起来很长,所以请耐心听我说。我的页面中有以下incude js: var include = (function(){ var exports = {} var test = function(url){ var result = []; $.ajax(url).then(function(data){ result = data.form.records; // assume data.form.r
var include = (function(){
var exports = {}
var test = function(url){
var result = [];
$.ajax(url).then(function(data){
result = data.form.records; // assume data.form.records valid
console.log(result) // displays correctly Array [Object,Object]
});
return result;
}
exports.test = test;
return exports
})();
然后从页面上我进行以下调用(假设某个url有效)
稍后我有一个事件(一些按钮单击),它将使用数组中的值
input.on('click',function(){
console.log(array) // 2
});
我的问题是,当事件发生时,数组变量仍然无效,
console.log//2显示数组[]
我知道我的测试函数会立即返回,所以数组变量的立即值是array[],但是当调用input.click时,then()回调就已经执行了,所以应该修改数组本身。毕竟数组是一个引用
有什么建议吗?我通常不会问问题,因为大多数时候我是通过搜索找到答案的,但我已经试了一天了。也许我缺乏灵感。如果您能提供一些帮助,我们将不胜感激。
array
指的是一个空数组,但在ajax回调中,您有result=data.form.records
为结果
分配一个新数组,而不是更新数组
引用的数组,这就是为什么即使在控制台记录了结果
数组的正确值后,数组仍引用初始空数组的原因
var include = (function() {
var exports = {}
var test = function(url) {
var result = [];
$.ajax(url).then(function(data) {
result.length = 0;//remove existing items from the array
result.push.apply(result, data.form.records);//copy the items from the records to the result array instead of assigning a new value
console.log(result) // displays correctly Array [Object,Object]
});
return result;
}
exports.test = test;
return exports
})();
您需要在回调函数中设置数组(然后(…)是的,K3N是对的,AJAX是异步的,return是同步的,就像你编码它的方式一样,使用异步和同步都不起作用。只是想知道,如果要正确缩进代码并将分号放在下面是否真的那么难。我已经更改了引用,甚至没有注意到它…谢谢你给我展示result=data.form.records;是不是我的代码中有一个错误
var include = (function() {
var exports = {}
var test = function(url) {
var result = [];
$.ajax(url).then(function(data) {
result.length = 0;//remove existing items from the array
result.push.apply(result, data.form.records);//copy the items from the records to the result array instead of assigning a new value
console.log(result) // displays correctly Array [Object,Object]
});
return result;
}
exports.test = test;
return exports
})();