2013-01-06 156 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

是的,它的替代方式。 –

相關問題