2015-02-24 24 views
0

在實際提交之前,我使用以下Javascript來檢查表單。在.done中的jQuery ajax form.submit()始終觸發

$('#homesubmit').click(function(e){ 
    e.preventDefault(); 
    if (!$("#inputcode").val()) { 
     e.preventDefault(); 
     $("#inputcode").qtip({ 
      content: 'Please enter code!.', 
      style: { 
       /* Other qtip settings and stuff */ 
     }) 
    } 
    else { 
     var jqxhr = $.post("<?php echo base_url().'ajaxhandler?action=checkcodehome'?>", $("#startcode").serialize()) 
      .done(function() { 
       alert("Correct!"); 
       /* // If code is correct, please do submit the form... 
       $.('#startcode').submit(); */ 
      }) 
      .fail(function() { 
       alert("Wrong!"); 
       /* Maken a qtip tooltip*/ 
      }); 
    } 
}); 

當表單準備提交時,Ajaxhandler會給出200 OK標題,如果不是這種情況,Ajaxhandler會給出一個200 OK標題。這對於我的例子中的提示非常有用,但是當我想在表單上連續呼叫.submit()時,表單也會在.fail上提交。

我想我可以讓我的ajaxhandler返回一個帶有true/false的json,並在.done中檢查該值,但由於沒有我想要發送的數據,所以這似乎是多餘的。

爲什麼觸發alert()對應於響應,但總是調用$.('#startcode').submit()

親切的問候

+1

不'done'火災一旦接收到響應,天氣成功與否?嘗試'.success()' – atmd 2015-02-24 09:37:14

+0

是否在錯誤 – 2015-02-24 09:38:03

+1

的情況下出現'Correct'提醒,謝謝,工作!我認爲.done只是在成功時被解僱,但顯然這就是成功。 – user2693053 2015-02-24 09:42:37

回答

1

當一個jquery Ajax調用是全成是被炒魷魚的方法是success 爲每$.post docs

done()被觸發一次ajax調用已經返回,但這並不意味着它成功返回。

你也可以有你的成功的呼叫內聯,並使用不同的反應額外的方法,如:

var jqxhr = $.post("example.php", function() { 
    alert("success"); 
}) 
.done(function() { 
    alert("returned"); 
}) 
.fail(function() { 
    alert("fail"); 
}) 
.always(function() { 
    alert("fall back/always fires"); 
}); 
+0

已經有一段時間了,只是看到我沒有接受這個答案。現在接受它爲未來的讀者。 – user2693053 2017-11-20 07:49:16

+0

謝謝@ user2693053 – atmd 2017-11-20 13:09:30

0

你只需要返回false上失敗的情況