在ajax调用

时间:2016-01-11 20:53:11

标签: javascript jquery asp.net validation asp.net-ajax

我有一个自定义验证器来检查输入的号码是否唯一。如果数字不唯一,则应返回false。

javascript代码是这样的:

function ValidatePAuthNo(sender, args) {

        //args.IsValid = true;

        var PAuthNo = $('[id$=tbPriorAuthNumber]').val();

         $.ajax({
            type: "POST",
            url: "MedicaidPriorAuth.aspx/IsPAuthUnique",
            data: JSON.stringify({ pAuthNo: PAuthNo }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            error: function (response) {
                alert(" An error occurred." + response.error);
            },
            success: function (data) {
                if (data.d == false) {
                    //alert("P. Auth# already exists! Please enter new P. Auth #.");
                    $("[id$=lblError]").val("P. Auth# already exists! Please enter new P. Auth #.");
                    args.isValid = false;
                } else {
                    $("[id$=lblError]").val("");
                    args.isValid = true;
                }

            }
        });


        return args.IsValid;
    }

我的Web方法正在返回正确的值,但问题是返回args.IsValid是在ajax方法之前调用的。我在这里做错了吗?如果我的方法是错误的,那么从客户端这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:-1)

ajax方法是异步调用,这意味着它向服务器发送请求,服务器在其自己的时间返回它。同时,线程(javascript)的执行继续。这意味着您无法从ajax调用返回响应,因为返回将在服务器到达的响应之前发生。

解决方案是一种回调方法。您可以使用jquery promises执行此操作,但为简单起见,下面的示例仅使用javascrpt。 https://api.jquery.com/promise/

这也是一个非常容易找到的问题,您应该在发布新问题之前尝试搜索答案

function ValidatePAuthNo(sender, args, callback) { // call back is a function you pass as an argument

    //args.IsValid = true;

    var PAuthNo = $('[id$=tbPriorAuthNumber]').val();

     $.ajax({
        type: "POST",
        url: "MedicaidPriorAuth.aspx/IsPAuthUnique",
        data: JSON.stringify({ pAuthNo: PAuthNo }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        error: function (response) {
            alert(" An error occurred." + response.error);
        },
        success: function (data) {
            if (data.d == false) {
                //alert("P. Auth# already exists! Please enter new P. Auth #.");
                $("[id$=lblError]").val("P. Auth# already exists! Please enter new P. Auth #.");
                args.isValid = false;
            } else {
                $("[id$=lblError]").val("");
                args.isValid = true;
            }
             callback(args.isValid);
        }
    });
}