在 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 成功的函数中使用时数组内容不会改变的主要内容,如果未能解决你的问题,请参考以下文章

jQuery $.ajax(),将成功数据传递给单独的函数

为啥 AJAX 里写入的 cookie 无法显示出来

AJAX改变页面内容

从arraylist返回值到ajax成功函数

在jQuery中将字符串推送到AJAX成功函数中的数组不起作用

find 和 map的应用