gpt4 book ai didi

JavaScript/jQuery AJAX - 将异步数据返回到我的同步程序中

转载 作者:行者123 更新时间:2023-12-03 11:45:45 25 4
gpt4 key购买 nike

我有几个函数使用 jQuery AJAX 调用从我的服务器检索 XML 文件,并将其转换为可用的文件。看下面的代码:

getBalanceXML: function (callback) {
$.ajax({
type: 'GET',
url: 'Content/saldotracking.xml',
dataType: 'xml',
success: callback,
error: function () { throw new Exception("getBalanceXML(): Failed to load XML file"); }
})
},

getBalanceBarChart: function (xml) {
var balanceArray = [];
$(xml).find('Balance').each(function () {
var nodeObject = {
//fill a JavaScript object with values from the XML file in the format I need
}
balanceArray.push(nodeObject);

});
console.log(balanceArray);
return balanceArray;
}

现在,当我使用以下命令调用此函数时:

var stuff = getBalanceXML(getBalanceBarChart);
alert(typeof(stuff));

stuff var 仍未定义。按照 StackOverflow 上的其他答案,我将 getBalanceChart 函数作为参数传递给 getBalanceXML 函数,该函数执行 AJAX 调用。成功!现在 getBalanceChart 还可以使用从 AJAX 调用获得的 XML 文件。然而,我所做的只是将同步问题转移到另一个函数。我的程序的同步部分仍然需要来自异步函数的数组。

我该怎么办?

最佳答案

已编辑添加代码

问题在于,在这一行,赋值发生在函数完成之前,因此出现“未定义”结果

var stuff = getBalanceXML(getBalanceBarChart);

如果我正确理解您的需求,这应该可以解决您的问题:

  1. 使stuff成为全局可访问的变量

  2. 在您的getBalanceBarChart中不要返回该值,而是直接将其分配给stuff

  3. (可选)您仍然可以在 getBalanceBarChart 函数中触发您可能想要执行的其他一些操作。

基本上,通过在回调函数结束时对结果进行赋值并触发下一个操作,您可以保证异步部分已完成。

希望有帮助。

getBalanceBarChart: function (xml) {
var balanceArray = [];
$(xml).find('Balance').each(function () {
var nodeObject = {
//fill a JavaScript object with values from the XML file in the format I need
}
balanceArray.push(nodeObject);

});
console.log(balanceArray);

// DO not return value, instead assign it to a variable directly,
// since this will only occur after any asynchronous processing

myGlobalVariable = balanceArray;

// optional : someOtherFunction();
}

关于JavaScript/jQuery AJAX - 将异步数据返回到我的同步程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26059675/

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