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

Javascript 在执行ajax调用后尝试验证结果,javascript,jquery,ajax,Javascript,Jquery,Ajax,好的,我有表单验证函数。该函数通过表单验证函数运行,如果字段无效,则返回false 问题是当它到达使用ajax检查字段是否有效的函数时 出于某种原因,它似乎不会“等待”ajax返回并自动返回false 有办法解决这个问题吗 代码如下: function form_validation(){ if (!NewValidationForm('pcode', 'Please fill in all the fields')) return false; if (!Ne

好的,我有表单验证函数。该函数通过表单验证函数运行,如果字段无效,则返回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;
    }
}

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

然后,在
$.ajax
回调中,当验证完成时,调用
$('form').submit()
。这将有效地使用表单上的属性作为是否更改验证请求状态的标志。当用户第一次提交表单时,将设置标志并开始验证过程。验证完成后,将触发表单的提交事件,并且由于设置了标志,因此这次表单将像正常情况一样提交


如果这种方法对您有效,您可能需要添加一些润色。例如,您可能希望在调用
$.ajax
之前禁用submit按钮,并在验证失败时再次启用它。如果验证失败,您可能还希望从表单中删除
data submitted
属性,因为用户可能会再次提交表单,在这种情况下,您可能希望执行另一次验证。

“出于某种原因”-这可能是因为Ajax是异步的。立即返回
$.ajax()
调用以及稍后调用成功(或错误)回调是完全正常的。您应该稍微重新构造代码,以便在成功验证后,您想做的任何事情都可以从Ajax成功处理程序中完成。这是一个问题,我试图让人们仅在字段验证时提交表单,因此我让它返回false,直到验证函数返回true。我尝试在ajax调用返回时提交表单,但似乎不起作用我只是编辑了:call$(“form”).submit()而不是触发按钮单击。并确保您的提交按钮没有name=“submit”;谢谢你的帮助,我现在就试试。
$('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;
});