javascript中更新的表单验证错误

时间:2013-03-22 07:53:03

标签: javascript

从下面的编码中,如果某些数据有误,则会提示错误。如果确认的密码与密码不同,它可以正常工作。但是,如果登录ID检查似乎有一些问题。它分别提醒true789 false false123 false456。为什么结果不是假123假false456 false789假?因为json的延迟?怎么解决呢?

var result = "true";

$('#test').click(function(){
    validation();
    alert(result);  
});

function validation(){  
    result = "true";
    var loginID = $("#loginID").val();
    var role = $("#role").text();

    // check Login Name
    if (loginID == "" || loginID == null){
        $('#errorID').empty();
        $('#errorID').append(
            '<h6>' + "The Login Name cannot be empty" + '</h6>'
        );
        $("#errorID").show();
        result="false";
    } else {
        $.ajax({
            type: "GET",
            dataType: "jsonp",
            jsonpCallback: "jsoncallback",
            data: {
                ID: loginID,
                role: role          
            },
            url: "http://mydomain.com/checkID.php?jsoncallback=?",

            success: function(data){
                if (data[0].data.user_name!=""){    
                    result="false";
                    alert(result+"123");
                    $('#errorID').empty();
                    $('#errorID').append(
                        '<h6>' + "The Login Name " + data[0].data.user_name + 
                        " is used." + '</h6>'
                    );
                    $("#errorID").show();
                    alert(result+"456");
                }
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert("Request failed: " + textStatus + errorThrown);
                result="false";
            }
        }); //end of ajax
    }
    alert(result+"789");            
    return result;
} // end of #validation

1 个答案:

答案 0 :(得分:1)

ajax调用是异步完成的。它进入ajax()函数然后继续,当结果最终到来时,警报或事件处理程序中的任何内容将触发。 您可以在ajax调用中添加async : false,这将改变运行方式。 789警报仅在ajax调用完成并响应后才会运行。 此外,如果您的域名进行了ajax调用,那么您不需要jsonpCallback,如果响应的标头是application/json,那么您也应该删除dataType并将其保留给jQuery以正确处理它