我在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;
}
答案 0 :(得分:1)
将async: false
添加到ajax调用。
答案 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');
}
});