在AJAX调用中填充外部数组

Fill external array in AJAX call

本文关键字:外部 数组 填充 AJAX 调用      更新时间:2023-09-26

我正试图编写一个通用函数,它将填充我通过服务器的数据传入的任何数组。下面的代码确实正确地填充了函数内的数组,但是当我试图传入'characters'数组时,它不会接受它。

下面是函数调用:

$(document).ready(function() {
    databaseConnect("loadCharacter.php", characters);
    document.write(characters[0]); //This spits out 'undefined'
});

函数是这样的:

function databaseConnect (file, array) {
    if (login == true) {
        $.ajax({
            type: "POST",
            url: file,
            data: {id : identi},
            success: function(data, array) {
                array = data.split('-');
                i = 0;
                while(array[i]) {
                    array[i] = JSON.parse(array[i]);
                    ++i;
                }
            },
        });
    } else {
        document.write("Dude. You're not logged in.");
    }
}

您需要了解异步是如何工作的。您的代码执行如下:

  1. databaseConnect被称为
  2. ajax调用被发送到服务器
  3. databaseConnect函数将控制权返回给主$.ready()函数
  4. 文档。Write被调用——但此时字符数组中没有任何内容。执行前4步最多需要几十微秒,而来自服务器的ajax响应需要更长的时间才能返回。
  5. …很久以后,ajax返回并填充字符数组。

你应该使用回调,如

$(document).ready(function () {
    databaseConnect("loadCharacter.php", processCharacters);
});
function processCharacters (characters) {
    document.write(characters[0]); 
}
function databaseConnect (file, callback) {
    if (login == true) {
        $.ajax({
            type: "POST",
            url: file,
            data: {id : identi},
            success: function(data, array) {
                var array = data.split('-');
                i = 0;
                while(array[i]) {
                    array[i] = JSON.parse(array[i]);
                    ++i;
                }
                callback(array);
            },
        });
    } else {
        document.write("Dude. You're not logged in.");
    }
}