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

标签 javascript codeigniter jquery

好的...凌晨 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/

相关文章:

javascript - 无法触发自制的Event.prototype

Javascript 检查 html 文件是否存在

javascript - 使用node.js从url下载文件到服务器

javascript - Breeze Js - "Lookup Lists"的本地查询

javascript - GiantBomb API 工作

php - 比较 PHP 中的波斯字符

javascript - 动态加载 CSS 和 JS 文件

php - 在 CodeIgniter 中不使用 Eval 来计算 php 中的表达式

php - 凌乱的 Jquery + HTML + PHP

jquery - 如何使用 jQuery 从 JSON 文件获取 key