2013-01-06 120 views
0

至少我认为那是发生了什么。我有一个.js文件中的代码,用于调用另一个.js文件中存在的函数。这个函数调用一个php页面,创建并返回一个单选按钮列表。当函数返回时,代码被执行,将所选单选按钮的值传递给一个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是不确定的和来电之后依赖于该失败。

+1

AJAX:_Asynchronous_ JavaScript and XML。我怀疑所有这个问题都有很多答案。 – elclanrs

+0

改为使用'$(“#major_groups input [type = radio]”)''。 –

+0

@AspiringAqib我想知道是否有一种更有效的方法来选择基于某个容器的单选按钮。讨论jQuery选择器有没有一个好的,全面的来源?我知道$(#id),但我不熟悉上面更具体的。 –

回答

0

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

$.ajax({ 
........... 
async: false, 
.............. 
+0

另一种方式是将函数后面的代码包装在函数中,并在ajax调用的成功函数中调用该函数? –

+0

是的,它的替代方式。 –

相关问题