0

少なくとも私はそれが起こっていると思います。別の .js ファイルに存在する関数を呼び出す .js ファイルにコードがあります。この関数は、1 つが選択されたラジオ ボタンのリストを作成して返す PHP ページへの ajax 呼び出しを行います。関数が戻ると、選択したラジオ ボタンの値を php ページに渡し、いくつかのリストを生成するコードが実行されます (再び ajax 経由)。ユーザーが選択したラジオ ボタンを変更するたびに、リストが更新されます。これはクリックして選択すると機能しますが、ページが読み込まれると適切なラジオ ボタンが選択されますが、選択したラジオ ボタンをキャプチャするコードは未定義を返します。関数呼び出しの直後にアラートを配置すると、正しく機能します。これは、物事が順不同で実行されていると私に信じさせます。

私が以前これを回避した方法は、関数内の最初の関数呼び出しの後にコードを配置し、最初の関数の最後でその関数を呼び出すことでした。ただし、これは、なぜこれが起こっているのかを理解するのに役立ちません。コードは次のとおりです。

最初のファイル:

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

2 番目のファイル:

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 に答える