2017-01-25 12 views
1

はそれが.fail(failOption)を失敗したときに{ac:failed}あるcreateSite機能期待リターンは、関数が実行され、まだcreateSite機能からのデータを保持しますsendMail/.done(sendMail)他に実行されます操作することですこれajax約束の{bar1:"foo1",bar2:"foo2",bar3:"foo3"}jQueryのの.done().fail()私たちがここに欲しい

var cSite = createSite(); //expected return if failed is {ac:"failed"} else success expected return will be {bar1:"foo1",bar2:"foo2",bar3:"foo3"} 


var cSite = createSite(); 
cSite.done(sendMail).fail(failOption).always(alwaysOption); 

function createSite() { 
    return $.ajax({ 
     url: 'something.php', 
     method: 'POST', 
     data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name 
    }); //ajax 
} //createSite 
+0

jQueryの遅延オブジェクトを見てください:https://api.jquery.com/category/deferred-object/ – elementzero23

答えて

0

jQueryのfail一部は400: bad requestまたは500: internal server errorのような私が想像する200の範囲以外のHTTPステータス、上のトリガされています。

something.phpから失敗ステータスを渡すことができない場合、2つのオプションがあります。 jQueryの1と2の場合:

function createSite() { 
    return $.ajax({ 
     url: 'something.php', 
     method: 'POST', 
     data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name 
    }).then(function(data) { 
     if(data.ac === 'failed') { 
      throw data 
     } else { 
      return data 
     } 
    }); 
} 

これは完全にテストされていないことに注意してください:jQueryの(3+)の新しいバージョンで

function createSite() { 
    var promise = $.Deferred(); 

    $.ajax({ 
     url: 'something.php', 
     method: 'POST', 
     data: "template_id=" + template_id + "&original_url=" + original_url + "&email=" + email + "&first_name=" + first_name + "&last_name=" + last_name 
    }).then(function(data) { 
     if(data.ac === 'failed') { 
      promise.reject(failed) 
     } else { 
      promise.resolve(data); 
     } 
    }) 

    return promise; 
} 

、あなたもfailをトリガーするエラーをスローすることができます。 deferredのドキュメントはhereです。

+0

私は知っていますが、それはOPが尋ねているものである成功状況では失敗しません – Jorg

+0

あなたはそれの約束を必要としません、あなたは単に失敗機能を呼び出すことができます。 –

+0

'$ .ajax'からまっすぐではありません、そうですか? – Jorg

関連する問題