2016-04-27 8 views
3

これはおそらくばかげたバグですが、ここにはあります。

$ .ajax()呼び出しの成功関数内でjQuery Promiseを拒否する必要があります。戻り値 "success"はブール値です。

function doSomething() { 

     var myPromise = $.ajax({ 

      method: "POST", 
       url: "/url/to/use", 
       data: {"value":$("#value").val()}, 
       success: function(data) { 
        if (data.success == false) { 
         ConfirmMessage.showErrorMessage(data.messages[0]); 
         return new $.Deferred().reject().promise(); 
        } else { 
         // do other stuff 
        } 
       } 
      }); 

      return myPromise; 

     } 

doSomethingの()は、次に()チェーンの後に使用されます。

doSomething().then(doSomethingElse).then(soOn).then(soForth); 

だから私は約束を拒否し、チェーンを破ることができるようにする必要があります。

ヘルプありがとうございます。

+1

解決済みのajax約束を拒否することはできません。おそらく、ajaxの約束を返すのではなく、ajaxコールバック内で解決済みまたは拒否済みとマークされた別の約束オブジェクトを返すことができます。 – apokryfos

答えて

4

successコールバックからはできません。とにかくそれを使用する理由はありません。ただ使用するthen

function doSomething() { 
    return $.ajax({ 
     method: "POST", 
     url: "/url/to/use", 
     data: {"value":$("#value").val()}, 
    }).then(function(data) { 
     if (data.success == false) { 
      ConfirmMessage.showErrorMessage(data.messages[0]); 
      return new $.Deferred().reject().promise(); 
     } else { 
      // do other stuff 
     } 
    }); 
} 
+0

それはそれをしました。しばらくの間、これが最後のJQ約束に関する質問になることを願っています。ありがとうございました。 – Jason

関連する問題