0

我在 javascript 中有两个 if 语句。我需要第二个 if 语句仅在执行第一个 if 语句之后运行(我不能将两个 if 语句放在彼此内部,因为第一个 if 语句有时会执行。否则,必须在第二个 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: false到 ajax 调用。

于 2012-04-10T01:29:57.350 回答
1

你对回调和异步代码有误解。

您需要将第二个 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

与其将第二个 if 语句的实际代码放入成功中,不如考虑放入另一个函数中。

于 2012-04-10T02:21:22.647 回答
0

嗯,你能把第二个变成一个函数并在成功时调用它吗?如果我误解了你的问题,我很抱歉..

或者你可以这样做

   $("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 回答