jQuery AJAX调用始终触发成功

时间:2014-07-03 16:39:21

标签: jquery ajax twitter-bootstrap validation

我有这个登录表单,我在其中进行服务器端验证,现在我正在尝试进行jQuery验证。

表格摘要:

<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片段:(我使用bootstrap&#39; 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)(因为它总是触发),当它必须为假时数据为假,而当必须为真时,数据为真。因此,鉴于这种情况,我对错误的位置感到困惑。

修改

我以前试过这个没有成功,现在我肯定知道理论上它是正确的,因为Ramesh和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");
        }    
        });  
       }

正如Blurfus所说,我错过了&#34;&#34;因此,在内部成功函数中,数据比较应该是一个字符串:

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

2 个答案:

答案 0 :(得分:1)

我认为你的checkIfUsernameOrEmailExists只是返回TRUE或FALSE。如果它抛出任何错误,那么只会调用jquery错误。另外,它只会成功。如果您想抛出错误,请检查false是否成功并提醒它。

$.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

答案 1 :(得分: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参数。