2014-07-03 123 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的数据,看看,什么来临,是否会成为虚假或不? –