2014-07-03 130 views
1

我有這個登錄表單,我做了服務器端驗證,現在我試圖做一個jQuery驗證。jQuery AJAX調用總是觸發成功

形式片段:

<div class="form-actions"> 
    <button type="submit" class="btn green pull-right">Login <i class="m-icon-swapright m-icon-white"></i></button> 
</div> 

jQuery的片段:(我用引導的login.js)

submitHandler: function (form) { 
    var un = $('#usernameEmail').val(); 
    var p = $('#pass').val(); 

    $.ajax({ 
     url: '/admin/checkIfUsernameOrEmailExists', 
     type: 'POST', 
     data: {un: un, pass: p}, 
     success: function(data){ 
      form.submit(); 
     }, 
     error: function(data){ 
      alert("Error"); 
     }  
    }); 
    } 

功能checkIfUsernameOrEmailExists工作完美。我在成功函數上做了一個console.log(data)(因爲它總是觸發),並且當它必須是假的時候數據是假的,而當必須是真時,數據是假的。所以鑑於這種情況,我對這個錯誤可能在哪裏感到困惑。

編輯

我沒有成功嘗試過這個,現在我肯定知道,在理論上是正確的,因爲拉梅什和Keune建議...但仍不能工作,也許我有一些錯誤和唐沒有意識到?沒有錯誤顯示,沒有登錄console.log,沒有警報顯示。

submitHandler: function (form) { 
    var un = $('#usernameEmail').val(); 
    var p = $('#pass').val(); 
    $.ajax({ 
     url: '/admin/checkIfUsernameOrEmailExists', 
     type: 'POST', 
     data: {un: un, pass: p}, 
     success: function(data){ 
      if (data) { 
       form.submit() 
      }else{ 
       // console.log(data); 
       alert(data); 
      }; 
     }, 
     error: function(data){ 
      alert("Error"); 
     }  
     }); 
     } 

SOLUTION

正如Blurfus說,我錯過了 「」 那麼,成功函數內部的數據比較應該是對一個字符串:

success: function(data){ 
    if (data == "true") { 
     form.submit() 
    }else{ 
     alert(data); 
    }; 
}, 
+4

成功功能在請求成功時被調用。它並不瞭解您的業務邏輯。 – keune

+0

@keune我現在知道。謝謝你的提示。無論如何,正如我告訴RameshKotha它的成功和用戶可以登錄時,它的作品。但如果錯誤,如果data是一個對象或一個數組,或者任何真實的東西(例如* string *'「false」),那麼警報msge不會顯示爲 – Limon

+0

,它會提交表單。 –

回答

1

如果我理解正確的documentation,你需要做到這一點在你的success回調函數

success: function(data, status, jqXHR){ 
    ... 
} 

是的,我知道其他兩個是可選的,但是根據功能簽名:

Function(PlainObject data, String textStatus, jqXHR jqXHR)

Data是從服務器返回的一個對象,根據dataType參數(您沒有指定)格式化,並且可能的值爲xml, json, script, or html - 但它的確嘗試使用智能猜測。所以,換句話說,它不能很好地處理布爾值data(完全?)。

我最好的猜測是,你將必須覈查像String

if(data == "TRUE"){ 
    form.submit(); 
}else{ 
    alert('Error'); 
} 

,也許指定另外一個dataType參數爲好。

+0

嘿感謝您的評論。它與Ramesh和Keune所說的一樣,把邏輯放在成功函數中。但是,多虧了你,我發現問題是,我錯過了「」在線:如果(數據==「真」) – Limon

+0

很高興我可以幫助:) – ochi

1

我覺得你checkIfUsernameOrEmailExists是隻是返回TRUE或FALSE。如果它引發任何錯誤,那麼只會調用jquery錯誤。其他方面,它只會成功。如果您想拋出錯誤,請檢查成功的錯誤並提醒。

$.ajax({ 
     url: '/admin/checkIfUsernameOrEmailExists', 
     type: 'POST', 
     data: {un: un, pass: p}, 
     success: function(data){ 
      if(data){ 
       form.submit(); 
      }else{ 
       alert('Error'); 
      } 
     }, 
     error: function(data){ 
      alert("Error"); 
     }  
    }); 

參見:JQuery Ajax

+0

Ramesh是對的。如果AJAX查詢成功或失敗,jQuery檢查成功。您收到的數據無關緊要。 – thepratt

+0

我之前做過這件事,因爲它不適合我而將它刪除。我知道這是正確的邏輯,但這個代碼對我來說不起作用。警報錯誤仍未顯示出來,它可能是什麼? – Limon

+0

把console.log的數據,看看,什麼來臨,是否會成爲虛假或不? –