2016-12-21 4 views
1

私は別の場所で関数を呼び出そうとしています。なぜ私は真実か偽りかを返します。私が得た 問題はhasCreditCardを実行する時間を持つ前に、AJAX呼び出しがasynchronousであり、あなたのif-statementは、コールの終了を待たないので、他に直接行く呼び出し、...AJAX呼び出しの後にアクションを実行する方法は?

if (hasCreditCard($('#memberId').val())) { 
    ... 
} 
else{ 
    ... 
} 

function hasCreditCard(memberId) { 
    var url = getHostName() + "/members/" + memberId + "/creditcard"; 
    jQuery.ajax({ 
     type: "head", 
     url: url, 
     contentType: "application/json", 
     headers: { 
      "Authorization": "Basic " + $.cookie('authorization') 
     }, 
     success: function (data, status, jqXHR) { 
      if (jqXHR.status == 200) { 
       return true; 
      } 
      return false; 
     }, 
     error: function (jqXHR, status) { 
      return false; 
     } 
    }); 
} 
+0

'if'条件で実行したい' ajax success'関数にコードを入れ、 'ajaxエラー'関数で実行したいコードをelse部分に入れます – Shaybi

+0

あなたはasyncを試すことができます:ajaxのfalse属性 – rahulsm

答えて

1

です。

2種類の溶液:

#1あなたが関数にコールバックを渡し、あなたの成功/エラーハンドラでこのコールバックを呼び出すことができます。

getCreditCard($('#memberId').val(), function (hasCreditCard) { 
    if (hasCreditCard) { 
    ... 
    } else { 
    ... 
    } 
}) 

function getCreditCard(memberId, nextStep) { 
    ... 
    jQuery.ajax({ 
    ... 
    success: function (data, status, jqXHR) { 
     if (jqXHR.status == 200) { 
     nextStep(true) 
     return 
     } 
     nextStep(false) 
    }, 
    error: function (jqXHR, status) { 
     nextStep(false) 
    } 
    }) 
} 

#2あなたが別の世界を作成することができます成功/エラーハンドラでこの関数を呼び出します。

getCreditCard($('#memberId').val()) 

function getCreditCard(memberId) { 
    ... 
    jQuery.ajax({ 
    ... 
    success: function (data, status, jqXHR) { 
     if (jqXHR.status == 200) { 
     nextStep(true) 
     return 
     } 
     nextStep(false) 
    }, 
    error: function (jqXHR, status) { 
     nextStep(false) 
    } 
    }) 
} 

function nextStep(hasCreditCard) { 
    if (hasCreditCard) { 
    ... 
    } else { 
    ... 
    } 
} 
関連する問題