использовать каждую функцию библиотеки jquery.
$.each(words, function(index, value) {
arrayen.push(value);
});
Это происходит потому, что вы используете asynchronous function
, то есть $.ajax()
. Вот почему ваш оператор console.log(arrayen.length)
выполняется первым, а затем вы получаете данные.
Для запуска вашей программы добавьте console statement
внутрь success callback
. Он убедится, что длина будет напечатана, как только вы получите данные с сервера.
Функция успеха в ajax
- это функция, запускаемая при успешном выполнении запроса. Поэтому, если вы хотите, чтобы в вашем журнале были результаты вашего успеха, поместите console.log
в функцию успеха следующим образом:
$.ajax({
type: 'POST',
url: 'getEnglishWords.php',
success: function(words){
words = JSON.parse(words);
for(var i = 0; i < 50; i++) {
arrayen.push(words[i].en);
}
console.log(arrayen.length);
},error: (error) => {
console.log(JSON.stringify(error));
}
});
Поместите console.log(arrayen.length);
внутрь, как показано ниже.
var arrayen = [];
$.ajax({
type: 'POST',
url: 'getEnglishWords.php',
success: function(words){
words = JSON.parse(words);
for(var i = 0; i < 50; i++) {
arrayen.push(words[i].en);
}
},error: (error) => {
console.log(JSON.stringify(error));
}
}).done(function(results) {
console.log("done : " + arrayen.length);
});
var arrayen = [];
$.ajax({
type: 'POST',
url: 'getEnglishWords.php',
success: function(words){
words = JSON.parse(words);
for(var i = 0; i < 50; i++) {
arrayen.push(words[i].en);
}
findArrayLength(arrayen);
},error: (error) => {
console.log(JSON.stringify(error));
}
});
function findArrayLength(x) {
console.log(x.length);
}
AJAX асинхронный и не блокирует браузер. Если вы запускаете Ajax-запрос, пользователь все еще может работать, пока запрос ожидает ответа. Когда сервер возвращает ответ, выполняется обратный вызов для его обработки.
Вы можете сделать XMLHttpRequest синхронным, если хотите, и если вы это сделаете, браузер блокируется, пока запрос не выполнен (поэтому большую часть времени это неуместно)