如何通过AJAX响应将值推入数组?

时间:2019-01-18 05:40:54

标签: javascript php jquery ajax

加载页面时,我尝试使用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('');

结果: enter image description here

我收到错误消息:Cannot read property 'split' of undefined

5 个答案:

答案 0 :(得分:1)

此行为是因为您使用的是asynchronous function的{​​{1}}。这就是为什么先运行$.ajax()语句然后再获取数据的原因。

要运行程序,请在console.log(arrayen.length)内添加console statement。从服务器获取数据后,将确保将打印长度。

What is ajax?

答案 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);
});