2016-03-23 21 views
-1

ajax dönüşü then kullanarak tamamlandıktan sonra bir işlev çalıştırmaya çalışıyorum, ancak geri dönüşten önce çalışıyor gibi görünüyor. Kodum aşağıdaki gibidir:ajax dönüşünden önce çalışıyor

var existingUser = false; 

    $.ajax(
      { 
       url: '/ajax/signup', 
       data: { signup_email: signupEmail }, 
       type: 'post', 
       dataType: 'json', 
       success: function(data) { 
        if (data.message == 'The email address '+signupEmail+' has already been registered.') { 
         existingUser = true; 
         console.log('truth!') 
        } 
       } 
      } 
     ) 
      .then(console.log(existingUser)) 

Ki bu dönüş beklenen mesaj varsa

truth! 
true 

log beklenir, ama yanlış ne yapıyorum yerine

false 
truth! 

günlüğü olduğu İşte?

+0

Niçin başarı işleyicisini ajax öğesinden başarı işleyicisine taşıymıyorsunuz, bu durumda ikisi de –

+2

console.log (value) olarak adlandırılıyor. Bunu açıkça bir geri çağırma işlevine koymanız gerekiyordu, ancak bunu yapamadı. –

+0

neden 'o zaman()' ve 'success()'? kafa karıştırıcı görünüyor ve açıkçası, bu .. – dandavis

cevap

1

then'a iletilen argüman bir işlev olmalıdır. Sizin durumunuzda, konsol.log hemen aldığınız çıktısı alır.

http://jsfiddle.net/9L7dD/12/ http://jsfiddle.net/9L7dD/13/

+0

Parlak! Bu tam olarak eksik olduğum nokta. – wogsland

+0

@wogsland funny, bu tam olarak benim yorumumda console.log hakkında yaptığım nokta. :) –

+1

@Kevin Evet, ama görünüşe göre kalın kafamın içinden almak için biraz daha detaylandırılmaya ihtiyacım vardı;) – wogsland

0

Bunun nedeni ajax isteğinin tamamlanmasından önce ajax isteğinin başlatılması işlev çağrısının bitmesidir. Özünde:

  1. fırlatma ajax isteği
  2. çıkış existingUser
  3. çıktı "gerçeğin"

sadece senin console.logsuccess işleyicisinde ekleyebilir miyim?

-1

Senin sorunun sizin ajax isteği yerine getirildi ve bir yanıt ... iyi olmayan bir hata yanıt aldıktan ediliyor sözünü üzerine başarısını yürütür olmasıdır bu iki örneğe bakın. Ajax işlevi, çözümlendikten sonra (URL'nizden bir yanıt almak) NOT: "o zaman", basitçe yürütülür. Eğer gerçekten uygun bir şekilde çalışıyorsa, başarı fonksiyonunu kontrol ettiğinizden, "o zaman" deyimine gerçekten konsolunuza ihtiyacınız yoktur.