0

至少我认为这是正在发生的事情。我在一个 .js 文件中有代码,它调用另一个 .js 文件中存在的函数。此函数对 php 页面进行 ajax 调用,该页面创建并返回一个选中的单选按钮列表。当函数返回时,将执行将所选单选按钮的值传递给 php 页面并生成更多列表的代码(再次通过 ajax)。每次用户更改选定的单选按钮时,列表都会更新。这在我通过单击选择它们时有效,但是,当页面加载时,选择了正确的单选按钮,但捕获所选单选按钮的代码返回未定义。当我在函数调用之后直接发出警报时,它可以正常工作。这让我相信事情正在无序执行。

我之前解决这个问题的方法是将代码放在第一个函数调用之后的函数中,并在第一个函数的末尾调用该函数。但是,这无助于我理解为什么会发生这种情况。这是代码:

第一个文件:

$(document).on("pageinit","#add_page",function(){
     restore_addreg_page();
     //alert('function finished');
     var selected_group = $('#group :checked').val();
}

第二个文件:

function restore_addreg_page(){
    get_major_groups();
        ...more code
}
function get_major_groups(){
$.ajax({
    url: 'PHP_Scripts/get_major_groups.php',
    dataType: 'html',
    success: function(data){
        $('#major_groups').empty();
        $('#major_groups').append(data);
        $('#major_groups').trigger('create');
        $('input:radio').each(function(){
            if($(this).attr("id") == 'major_group0'){
                $(this).prop("checked",true).checkboxradio('refresh');
            }
        });
    },
    error: function(data){
        alert('Query Error');
    }
});
}

如果我取消注释警报,则一切正常,否则 selected_group 未定义,之后的调用取决于该失败。

4

1 回答 1

0

在这里,您的函数在获得结果之前被返回。默认情况下 ajax() 调用是异步调用。要使其同步,请在 ajax() 中将 async 属性设置为 false,如图所示。

$.ajax({
...........
async: false,
..............
于 2013-01-06T08:16:11.890 回答