加载页面时,我尝试使用AJAX将数据库中的值插入JS数组,然后获取随机值。
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));
}
});
console.log(arrayen.length);
运行页面时,它会将值插入数组(我在chrome控制台中检查了),但是-我在底部打印0中添加了console.log
。它看起来像console.log
在AJAX运行之前运行并导致问题。
编辑:我尝试将arrayen[12]
分成自己的数组。这意味着每个字符都在数组行中。所以我这样做:
console.log(arrayen);
var array = arrayen[12].split('');
我收到错误消息:Cannot read property 'split' of undefined
答案 0 :(得分:1)
此行为是因为您使用的是asynchronous function
的{{1}}。这就是为什么先运行$.ajax()
语句然后再获取数据的原因。
要运行程序,请在console.log(arrayen.length)
内添加console statement
。从服务器获取数据后,将确保将打印长度。
答案 1 :(得分:1)
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));
}
});
答案 2 :(得分:0)
将您的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);
});
答案 3 :(得分:0)
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同步,如果这样做,浏览器将在请求未完成时锁定(因此,大多数情况下这是不合适的)
答案 4 :(得分:0)
使用jquery库的每个函数。
$.each(words, function(index, value) {
arrayen.push(value);
});