【问题标题】:Return statement is called before ajax call在 ajax 调用之前调用 return 语句
【发布时间】:2016-04-16 07:29:18
【问题描述】:

我有一个自定义验证器来检查输入的数字是否唯一。如果数字不是唯一的,它应该返回 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 方法返回正确的值,但是,问题是在 ajax 方法之前调用了 return args.IsValid。我在这里做错了吗?如果我的方法是错误的,那么从客户端执行此操作的正确方法是什么?

【问题讨论】:

  • 这与 asp.net 无关,它是 ajax 和 ajax 表示异步 JavaScript 和 XML,因此默认情况下 ajax 调用(除非您设置 async: false 选项)是任意同步的,您的函数将在您获取之前返回来自服务器的响应。在服务器响应后传递一个回调函数来执行。审查你的代码设计

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


【解决方案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);
        }
    });
}

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 2012-05-07
    • 2013-05-05
    • 2020-01-04
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多