2016-08-01 64 views
2

http://i.imgur.com/eFjV8Uv.png爲什麼我的AJAX運行4次

$("#login").on('click', function() { 
    $(".login .col2, .login .signin, .login .close").fadeOut(500, function() { 
     $(".login .spinner").fadeIn(500); 
     var username = $("#username").val(); 
     var password = $("#pw").val(); 
     var data = "username="+username+"&password="+password; 
     $.ajax({ 
      url: './api/prijava', 
      method: 'POST', 
      data: data, 
      dataType: 'json', 
      success: function(data) { 
       if(data.odg == 1) { 
        $(".login .spinner").fadeOut(500, function() { 
         $(".login .msg").append('Prijava uspješna').fadeIn(500, function() { 
          window.location = "./"; 
         }); 
        }); 
       } else if(data.odg == 2) { 
        $(".login .msg").css('background-color', 'rgba(0, 255, 0, 0.5)').append('<span>Prijava uspješna! Dobrodošli...</span>').fadeIn(500, function() { 
         window.location = "./?first=true"; 
        }); 
       } 
      }, 
      error: function(err) { 
       console.log(err); 
      } 
     }); 
    }); 
}); 

屏幕截圖顯示成功登錄(當地語言),但它應該顯示它一次,而不是4倍。我怎樣才能使它加載一次,就是這樣?

+0

.fadeOut([時間] [,完整])這是淡出的每一個選擇」匹配的項目完成過程中運行。登錄.col2,.login .signin,.login .close「,如果它運行4次,我將不得不假設有4個匹配。 –

回答

3

回調到fadeOut將對每個選定元素運行一次。相反,你可以使用promise來,因爲當它解決它只能運行一次:

$(selector).fadeOut(500).promise().then(function() { 
    // do ajax call here 
}); 
+0

感謝您的快速回復,忘記標記爲答案:D – unm4sk

相關問題