javascript - Ajax启动太晚了...真不方便

标签 javascript jquery ajax

我在使用 AJAX 时遇到了这个问题。我运行代码,并且在打印代码时 ajaxString 未定义,即使 Ajax 代码几乎是在 return 语句之前调用的。当我尝试在 HTML 生成和打印之后检索 AJAX 时,定义了 AJAX,因此它让我认为在 AJAX 有机会完成之前调用了返回。有什么办法解决这个问题吗?这是我当前的代码:

var ajaxHTML;
function runCode(str) {
    if (str == 'SubmitB' || str == 'SubmitC' || str == 'SubmitD') {
        generateHTML(str);
    }
    else {
    $('#Holder1').html("");
    $('#Holder2').html("");
    $("#container_demo").fadeOut(500);
    setTimeout(function(){$("#menu_container").html(generateHTML(str))},500);
    $("#container_demo").fadeIn(500);
    }
}
function generateHTML(source){
if (source =='d') {
          return makeSchoolComboBox() + "Please Select a Level: <select id='selectedLevel'><option value='level1'>l1</option><option value='level2'>l2</option><option value='level3'>l3</option><option value='level4'>l4</option></select><br> <button id = 'r' onClick='runCode(this.id)'>Go back</button><button id = 'SubmitD' onClick='runCode(this.id)'>Submit</button>";
    }
function makeSchoolComboBox() {
    $.ajax({
            type: 'GET',
            url: 'phpQueries.php?q=fill_school_list',
            success: function (data) {
                ajaxHTML = data;
            }
        });
        return ajaxHTML;
}

最佳答案

由于 AJAX 是异步的,因此您无法调用它并在调用仍在进行时直接返回。您需要在成功回调中填充菜单容器,如下所示...

function runCode(str) {
    if (str == 'SubmitB' || str == 'SubmitC' || str == 'SubmitD') {
        generateHTML(str);
    }
    else {
        $('#Holder1').html("");
        $('#Holder2').html("");
        $("#container_demo").fadeOut(500);
        makeSchoolComboBox();
    }
}

function makeSchoolComboBox() {
    $.ajax({
        type: 'GET',
        url: 'phpQueries.php?q=fill_school_list',
        success: function (data) {
            $("#menu_container").html(data  + "Please Select a Level: " +
                "<select id='selectedLevel'>" +
                "<option value='level1'>l1</option>" +
                "<option value='level2'>l2</option>" +
                "<option value='level3'>l3</option>" +
                "<option value='level4'>l4</option>" +
                "</select><br> <button id = 'r' onClick='runCode(this.id)'>Go back</button>" +
                "<button id = 'SubmitD' onClick='runCode(this.id)'>Submit</button>").fadeIn(500);
        }
    });
}

关于javascript - Ajax启动太晚了...真不方便,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23217832/

相关文章:

javascript - 如何在 Jquery Ajax 中使用 Json 数据

javascript - 创建动态 Javascript AJAX

javascript - 如何根据本地代码(即 en_GB、it_IT)格式化价格?

javascript - 将子跨度更改为调用函数的链接

javascript - 一个对象包含一个对象集合 - 每个对象都有一个 id 和名称,我如何将它们分开?

javascript - JQuery 拖放如何将已拖动的项目与新拖动的项目交换

javascript - 关于PHP、MYSQL、AJAX的问题

c# - 如何将带有 JSON、jQuery 的复杂对象数组发布到 ASP.NET MVC Controller ?

javascript - 单击 anchor 标记和外部元素时如何使用 JQuery 交换图像?

javascript - Ext JS 组合框 : how to fix item at the top of BoundList dropdown