jQuery等待if语句完成

时间:2012-04-10 01:25:28

标签: jquery ajax

我在javascript中有两个if语句。我需要第二个if语句才能在执行第一个if语句之后运行(我不能在彼此内部使用两个if语句,因为第一个语句有时会执行。否则,第一个必须在第二个语句运行之前进行检查。 )

我该怎么做?

这是代码btw:

    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;
    }

3 个答案:

答案 0 :(得分:1)

async: false添加到a​​jax调用。

答案 1 :(得分: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语句的实际代码放入成功。

答案 2 :(得分: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');
         }
    });