尝试在执行ajax调用后验证结果

时间:2012-12-08 02:02:24

标签: javascript jquery ajax

好吧我有表单验证功能。该函数运行表单验证函数,如果该字段无效,则返回false。

问题是当它到达使用ajax检查字段是否有效的函数时。

由于某种原因,它似乎没有“等待”ajax返回并自动返回false。

有办法解决这个问题吗?

以下是代码:

function form_validation(){

    if (!NewValidationForm('pcode', 'Please fill in all the fields'))
        return false;
    if (!NewValidationForm('fname', 'Please fill in all the fields'))
        return false;

    if(!validate_coupon()){
        alert("bad!!");
        return false;
    }

    return true;
}

function validate_coupon(){
    var url = $j("#site_url").val() + 'ajax_functions.php';
    var coupon = $j("#pcode").val();
    var result_status = false; // seem its jumps from here to:

    $j.ajax({
    type: "POST",
    url: url,
    data: { ajax: 'ajax', coupon: coupon}
    }).success(function(insertID){
        var obj = $j.parseJSON(insertID);
        if(obj.status == 1){
            result_status = true;
        }
    });
    // straight over here
    if(result_status == true){
        return true;
    }
}

1 个答案:

答案 0 :(得分:0)

通常在这种情况下我会在$(document).ready()中执行类似的操作:

$('form').submit(function (evt) {
    if (!$(this).attr('data-submitted')) {
        evt.preventDefault();
        $(this).attr('data-submitted', 'true');
        // call your form validation code here that fires the ajax request
        return false;
    }
    return true;
});

然后,在您的$.ajax回调中,验证完成后,请致电$('form').submit()。这有效地使用表单上的属性作为验证请求状态的标志。当用户首次提交表单时,将设置标志并开始验证过程。验证完成后,将触发表单的提交事件,并且自设置该标志以来,此时表单将像平常一样提交。

如果这种方法适合你,你可能想要添加一点点润色。例如,您可能希望在调用$.ajax之前禁用提交按钮,并在验证失败时再次启用它。如果验证失败,您可能还希望从表单中删除data-submitted属性,因为用户可能第二次提交表单,并且您可能希望在这种情况下执行另一次验证。