2016-03-23 4 views
-1

私は、Ajaxの戻りがthenを使って完了した後に関数を実行しようとしていますが、返される前に実行されているようです。次のように私のコードは次のとおりです。その後、Ajaxの返り前に実行する

リターンが期待されるメッセージを持っているが、代わりに私が間違って何をやっている

false 
truth! 

をログに記録されている場合、私は

truth! 
true 

をログに記録するように期待

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)) 

ここに?

+0

なぜ、成功ハンドラをajaxから成功ハンドラに移動して、2つが呼び出されている順番に問題が発生しないようにしますか。 –

+2

console.log(値)はすぐに実行されます。明らかにコールバック関数に入れることを意図していましたが、そうすることはできませんでした。 –

+0

なぜ 'then()'と 'success()'を使うのですか?混乱しているようですが、それは明らかです。 – dandavis

答えて

1

thenに引き渡される引数は関数でなければなりません。あなたのケースでは、console.logは即座に実行されているので、出力が得られます。

はあなたの問題は、あなたのAJAXリクエストがその約束果たさと応答...よく非エラー応答を受信して​​いるときに、成功を実行していることであるこの2つの例 http://jsfiddle.net/9L7dD/12/ http://jsfiddle.net/9L7dD/13/

+0

ブリリアント!これはまさに私が見逃していた点です。 – wogsland

+0

@wogsland面白い、これはまさに私のコメントのconsole.logについて書いていた点です。 :) –

+1

@ケビンええ、しかし、明らかに私はそれを私の太い頭を通って得るためにもう少し詳細に綴る必要があった;) – wogsland

0

これは、ajax要求を開始する関数呼び出しが、ajax要求が完了する前に終了するためです。本質的には:

  1. 打ち上げAJAXリクエスト
  2. 出力existingUser
  3. 出力 "真実"

単にあなたのconsole.logsuccessハンドラに追加することはできますか?

-1

を参照してください。 "then"は、ajax関数が実行された後で(URLからの応答を返す)実行された後に単に実行されます。成功した関数が正しく実行されているかどうかをチェックしているので、 "then"ステートメントにconsole.logが本当に必要ないようです。

関連する問題