gpt4 book ai didi

javascript - 在继续通过单独的功能之前等待 AJAX

转载 作者:可可西里 更新时间:2023-11-01 02:52:25 26 4
gpt4 key购买 nike

好的...凌晨 2 点,这是我划定的界限。帮助......在我的笔记本电脑最终从窗外出来之前。 :)

我尝试过使用 setTimer、回调和我能想到的所有其他方法(当然还有其他一些 Stackoverflow 提示)。我已删除所有内容,因此只留下基本代码。

我要做的是调用 parseRow(),在最后保存记录之前,我需要获取关联的类别(通过 AJAX);然而,它恰好从它身边吹过,所以类别总是“未定义”。

function parseRow(row){
var rowArray = row.trim().split(",");
var date = rowArray[0];
var checknum = rowArray[1];
var payee = rowArray[2];
var memo = rowArray[3];
var amount = rowArray[4];

//ERROR: blows right past this one and sets the category variable BEFORE ajax returns
var category = autoSelectCategory(payee);

saveRecord(date, checkNum, payee, memo, category, payment, deposit);
}

function autoSelectCategory(payee) {
var data;
$.ajax({
async: false,
url: "autoselectcategory",
dataType: "json",
data: {
string: payee
},
success: function (returnedData) {
data = returnedData;
}
});
return data;
}

最佳答案

AJAX 代表异步。这意味着在您的原始代码中,saveRecord 将在客户端接收到来自服务器的响应之前执行(并且,取决于$.ajax 实现,它可能在客户端将请求发送到服务器之前)。

此外,您似乎误解了函数在 JS 中的工作方式。 var category = autoSelectCategory(payee); 将类别设置为 autoSelectCategory 的返回值;但是代码中的 autoSelectCategory 函数不返回任何内容。

从另一方面来说,你的匿名函数的data返回值只能被$.ajax函数使用(和$.ajax 可能会忽略 success 参数返回值)。

这里是应该工作的代码:

function parseRow(row){
var rowArray = row.trim().split(",");
var date = rowArray[0];
var checknum = rowArray[1];
var payee = rowArray[2];
var memo = rowArray[3];
var amount = rowArray[4];

autoSelectCategory(payee, function (category) {
saveRecord(date, checkNum, payee, memo, category, payment, deposit);
});
}

function autoSelectCategory(payee, callback) {
$.ajax({
async: false,
url: "autoselectcategory",
dataType: "json",
data: {
string: payee
},
success: callback
});
}

关于javascript - 在继续通过单独的功能之前等待 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11289884/

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