0

JavaScript に 2 つの if ステートメントがあります。最初の if ステートメントが実行された後にのみ、2 番目の if ステートメントを実行する必要があります (最初の if ステートメントが時々実行されるため、2 つの if ステートメントを相互に含めることはできません。 )

どうすればいいですか?

コードは次のとおりです。

    if( $('#suggestion-'+change).html() == null )
    {       
        $.ajax({
            type: 'post',
            dataType: 'html',
            url: '/suggestion/ajax-change/',
            data: {type: change},
            success: function(result,status)
            {
                $('#profile_suggestion .content_wrapper').prepend(result);
            }
        });
    }

    if( active != change )
    {
        var panelShow = '#suggestion-' + change;
        var panelHide = '#suggestion-' + active;
        var dirShow = ''; var dirHide = '';

        switch( active )
        {
            case 'compatibility':
                dirHide = 'left';
                switch( change )
                {
                    case 'mutual':
                        dirShow = 'right';
                        break;
                }
            case 'mutual':
                switch( change )
                {
                    case 'compatibility':
                        dirHide = 'right';
                        dirShow = 'left';
                }
        }
        $(panelHide).hide("slide", { direction: dirHide }, 1000);
        $(panelShow).show("slide", { direction: dirShow }, 1000).removeClass('fader');
        $(panelHide).addClass('fader');
        active = change;
    }
4

3 に答える 3

1

async: falseajax 呼び出しに追加します。

于 2012-04-10T01:29:57.350 に答える
1

コールバックと非同期コードについて誤解しています。

成功のコールバックに 2 番目の if ステートメントを配置する必要があります。

$.ajax({
    type: 'post',
    dataType: 'html',
    url: '/suggestion/ajax-change/',
    data: {
        type: change
    },
    success: function(result, status) {
        $('#profile_suggestion .content_wrapper').prepend(result);
        if (active != change) {
            var panelShow = '#suggestion-' + change;
            var panelHide = '#suggestion-' + active;
            var dirShow = '';
            var dirHide = '';
            .....
        }
    }
});​

xhr(ajax) リクエストには応答する時間が指定されていないため、その応答に従って別のコード ブロックをいつ実行するかを正確に推測することはできません。この場合は、完了したコールバックでコードを実行する必要がありますsuccess

2 番目の if ステートメントの実際のコードを success に配置するのではなく、別の関数に配置することを検討する必要があります。

于 2012-04-10T02:21:22.647 に答える
0

うーん、2 つ目を関数にして、成功時に呼び出すことはできますか? あなたの質問を誤解した場合は申し訳ありません..

または、これを行うことができます

   $("something").bind('update', function() { do something you want to do });

   $.ajax({
        type: 'post',
        dataType: 'html',
        url: '/suggestion/ajax-change/',
        data: {type: change},
        success: function(result,status)
        {
            $('#profile_suggestion .content_wrapper').prepend(result);
        },
        complete: function() 
        {
            $("something").trigger('update');
         }
    });
于 2012-04-10T01:28:33.140 に答える