2012-04-10 12 views
0

Ich habe zwei if-Anweisungen in Javascript. Ich brauche die zweite if-Anweisung, die erst ausgeführt wird, nachdem die erste if-Anweisung ausgeführt wurde (ich kann die beiden if-Anweisungen nicht ineinander haben, da die erste if-Anweisung manchmal ausgeführt wird. Ansonsten muss zuerst überprüft werden, bevor die zweite ausgeführt werden kann).)jQuery warten auf if-Anweisung zu beenden

Wie mache ich das?

Hier ist der Code 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; 
    } 

Antwort

0

Hm, können Sie die zweite in eine Funktion zu machen und es auf Erfolg nennen? Es tut mir leid, wenn ich Ihre Frage ..

mißverstanden Oder Sie können diese

$("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'); 
     } 
    }); 
+0

Hallo, danke für die Antwort. Die beiden if-Anweisungen sind voneinander unabhängig, so dass sie nicht ineinander sein können. Es ist nur, dass die zweite if-Anweisung nach der ersten Anweisung ausgeführt werden muss (und manchmal ist die erste if-Anweisung sowieso falsch, aber das muss zuerst überprüft werden!) – user1083320

+0

Sie können auch die Verwendung von complete .. in Erwägung ziehen und trigger() verwenden Veranlassen, dass ein ordnungsgemäßes Ereignis generiert wird. –

1

async: false zum Ajax-Aufruf hinzufügen zu tun.

+0

Das hat nicht funktioniert! – user1083320

+0

Es sollte async sein, hast du meinen Tippfehler kopiert? :) –

+1

aysnc AJAX Anrufe sind schlechte Nachrichten Bären. – iambriansreed

1

Sie haben ein Missverständnis von Callbacks und asynchronem Code.

Sie möchten die zweite if-Anweisung in den Erfolgsrückruf einfügen.

$.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 = ''; 
      ..... 
     } 
    } 
});​ 

Da ein xhr (Ajax) Anfrage hat keine bestimmte Menge an Zeit, die Sie reagieren nicht genau erraten, wenn ein anderer Code-Block in accoradance zu laufen, um es Antwort ist. Sie müssen den Code in einem abgeschlossenen Rückruf ausführen, in diesem Fall success.

Statt den tatsächlichen Code für die 2. if-Anweisung in den Erfolg zu platzieren, sollten Sie in eine andere Funktion platzieren.

+0

Der Ajax muss nicht ständig angerufen werden! Also wollte ich die zwei if-Anweisungen getrennt aufbewahren, um einen zusätzlichen Aufruf an Ajax zu verhindern. – user1083320

Verwandte Themen