gpt4 book ai didi

JavaScript 数组未定义?

转载 作者:行者123 更新时间:2023-11-28 20:18:56 25 4
gpt4 key购买 nike

这似乎是一个微不足道的问题,但我无法解决。

我有这个功能。 var q被分配给一个字符串数组。 alert(q)调用函数时成功打印整个数组。

function initQuestions() {
$.post("quiz.php", { 'func': 'load' }, function(data) {
var q = data.split(".\n");
alert(q);
return q;
});
}

但是,当我尝试使用该函数时(如下以两种方式描述),我被告知该数组未定义。为什么会这样?

var questions;

$(function() {
//This doesn't work
questions = initQuestions();
alert(questions);

//Neither does this
alert(initQuestions());
});

经过进一步研究,我添加了一个回调到 initQuestions()但我得到了相同的结果。

最佳答案

post调用是异步的:Async Javascript

基本上,initQuestions() 函数在 post 完成之前返回 null

这样想:

function initQuestions() {
$.post("quiz.php", { 'func': 'load' }, function(data) {
var q = data.split(".\n");
alert(q);
return q; // <- returns to the caller of function(data), not initQuestions()!
});
return null; // <- This happens before function(data) is complete
}

为了使其按预期工作,您需要在发布成功并完成时提供回调。

function initQuestions(callback) {
$.post("quiz.php", { 'func': 'load' }, function(data) {
var q = data.split(".\n");
alert(q);
callback(q);
});
}

var questions;

function doSomthingWithQuestions() {
alert(questions); // <- should work
// do the things with the questions
}

$(function() {
initQuestions(function(result) {
questions = result;
doSomethingWithQuestions();
});

// Don't use `questions` here as the callback hasn't fired yet.
});

关于JavaScript 数组未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18711434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com