如何在没有setTimeout的情况下加载值?

时间:2010-07-19 02:54:34

标签: jquery ajax settimeout

查看以下示例:

<select id="connection" onchange="load_databases_of_this_connection();"></select>
<select id="database" onchange="load_tables_of_this_database();"></select>
<select id="table" onchange="load_columns_of_this_table();"></select>
<input id="fieldcode" type="text"/>
<input id="fieldcolor" type="text"/>
<script type="text/javascript" language="javascript">

$('#connection').change();

setTimeout("x()",2000 ); // select database and load tables

function x() {
        $('#database').val( 'main_database' );
 $('#database').change();
 setTimeout("t()",2000 );   //  select table and load columns
}


function t() {
 $('#table').val( 'payments' );    
 $('#table').change();
 setTimeout("a()",2000 ); // select columns
}

function a() {
 $('#fieldcode').val( 'code' );
 $('#fieldcolor').val( 'status' );
}

</script>

此代码有效,但我不喜欢它。我想要做的是随后加载值,当“更改事件”结束(成功或完成)然后调用下一个,例如,如果我执行以下示例而没有setTimeout这不起作用:


    <script type="text/javascript" language="javascript">
    $('#connection').change();
    $('#database').val( 'main_database' );
    $('#database').change();
    $('#table').val( 'payments' );
$('#table').change();
$('#fieldcode').val( 'code' ); $('#fieldcolor').val( 'status' ); </script>
我正在尝试使用ajaxComplete,但是我获得了一个无限循环,每个ajax调用结束时调用ajaxComplete ...:

$('#database').ajaxComplete( function (e) { 
    $('#table').val( 'payments' );    
    $('#table').change();   
} );

请帮助!

2 个答案:

答案 0 :(得分:1)

我轻松解决了......

$.ajax( {complete:function() {

    $('#database').val('main_database');

    $.ajax( {complete:function() {

        $('#table').val('payments');   

            $.ajax( {complete:function() { 

                $('#fieldcode').val( 'code' );
                $('#fieldcolor').val( 'status' );
            }});
    }});
}});

答案 1 :(得分:0)

我假设您的代码中有更多内容而不是眼睛,如果是这样,这应该可以解决问题:

$('#connection').change(function(){
    $('#database').val('main_database');
}); 
$('#database').change(function(){
    $('#table').val('payments');    
}); 
$('#table').change(function(){
    $('#fieldcode').val( 'code' );
    $('#fieldcolor').val( 'status' );
});