在 AJAX 成功的函数中使用时数组内容不会改变
Posted
技术标签:
【中文标题】在 AJAX 成功的函数中使用时数组内容不会改变【英文标题】:Array contents don't change when used in a function in AJAX success 【发布时间】:2019-09-09 02:50:45 【问题描述】:我正在使用 AJAX 解析 json,一切正常,尽管当我尝试调用一个函数时,我传递循环的索引值,然后该函数将此值推送到全局数组中,似乎不是推送这些值,即使 console.log() 在每一步都按应有的方式打印出所有内容,但是当我检查数组长度时,它始终为 0。
//This bit of code is actually inside a function and another ajax success
$.each(updatedData, function(index, element)
$.ajax(
type: 'GET',
url: 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts&exintro&explaintext&format=json&redirects&callback=?&titles='+updatedData[index],
data: get_param: 'value' ,
dataType: 'json',
success: function (data)
console.log('success wiki');
//getting the pagenumber key value to use the extract value from it
var pagenum = Object.keys(data.query.pages);
if(data.query.pages[pagenum[0]].extract == null)
recycleData(index);
);
);
//this is the function which should push the trash value to the trashData
//the console.log actually logs all the correct values yet still doesn't push
function recycleData(trash)
console.log("sliced - "+trash);
trashData.push(trash);
//that's how the array is defined, it's obviously defined before all the functions just in case someone would ask
var trashData = [];
更新:我在延迟后测试了数组长度,在所有 ajax 请求完成后填充它,但我需要其他请求来等待这个请求完成,以便另一个请求将使用更新的数据。这个请求是另一个 ajax 成功,所以请记住这一点。
【问题讨论】:
【参考方案1】:如果您想在完成时执行其他 ajax,您可以在上一个 ajax 的 done
函数上调用您的下一个 ajax 调用。
$.ajax( ... ).done(second_ajax_fn);
也可以设置async:false
,但不推荐
【讨论】:
【参考方案2】:问题可能是您在实际异步请求完成之前检查了trashData
的值。如果你想确保所有请求都完成然后检查它(或发出更多请求),你需要jQuery Deferred - waiting for multiple AJAX requests to finish之类的东西。
【讨论】:
以上是关于在 AJAX 成功的函数中使用时数组内容不会改变的主要内容,如果未能解决你的问题,请参考以下文章