Содержимое массива не изменяется при использовании в функции в AJAX - PullRequest
0 голосов
/ 18 апреля 2019

Я использую 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 = [];

UPDATE : у меня естьпроверил длину массива после задержки, он заполняется после того, как все запросы ajax были выполнены, но мне нужны другие запросы, чтобы дождаться завершения этого запроса, чтобы другие запросы использовали обновленные данные.Этот запрос находится в другом успехе ajax, так что имейте это в виду.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вероятно, проблема в том, что вы проверяете значение trashData до того, как фактические асинхронные запросы будут выполнены.Если вы хотите убедиться, что все запросы выполнены, а затем проверить его (или сделать больше запросов), вам нужно что-то вроде jQuery Deferred - ожидание завершения нескольких запросов AJAX .

0 голосов
/ 18 апреля 2019

Если вы хотите выполнить другой ajax по завершении, вы можете вызвать следующий вызов ajax для функции done предыдущего ajax.

$.ajax({ ... }).done(second_ajax_fn);

Также вы можете установить async:false, но это не рекомендуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...