javascript - 如何停止函数处理直到ajax调用完成?

标签 javascript jquery ajax

看看我有这样的代码

          function validate(){
            if (document.getElementById('<%=txtSeqNo.ClientId %>').value.trim() == "") {
                alert('Please enter Seuenceqnumer.');
                return false;
            }
            var result = checkduplicateseq();
            if (result) {
                return true;
            }
            else {
                return false;
            }           
        }

checkduplicateseq 的定义是

function checkduplicateseq() {
            var result = true;
            if ($('[id*=ctl00_CPHMainPageLambda_chkoperationlist] input[type="checkbox"]:checked').length > 0) {
                var seqNo = $("#ctl00_CPHMainPageLambda_txtSeqNo").val();
                var chkvalue = $('[id*=ctl00_CPHMainPageLambda_chkoperationlist] input[type="checkbox"]:checked').parent().parent().find("span").attr("datavalue");
                var hfmode = $("#ctl00_CPHMainPageLambda_hd_SequenceNo").val();
                var oldoperationid = $("#ctl00_CPHMainPageLambda_hd_operationo").val();
                if (seqNo == "") {
                }
                else {
                    $.ajax({
                        type: "POST",
                        url: "frmFAQMst.aspx/GetSequenceNoforOperation",
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        data: '{"OptionaId":"' + chkvalue + '","oldoperationid":"' + oldoperationid + '","seqNo":"' + seqNo + '","hfmode":"' + hfmode + '"}',
                        error: function (ex) {
                            console.log(ex);
                        },
                        success: function (response) {
                            if (response.d == "1") {

                                alert("Sequence Number already exist!");
                                $("#ctl00_CPHMainPageLambda_txtSeqNo").attr('value', '')
                                $("#ctl00_CPHMainPageLambda_txtSeqNo").focus();
                                result = false;
                            }
                            else {
                                result = true;
                            }
                        }
                    });
                }
            }
                return result;
        }

现在如果我最后从验证函数中调用 checkduplicateseq 并将 checkduplicateseq 函数的返回值存储在变量中,例如

var result = checkduplicateseq();

在浏览器中我可以看到 result = undefine 的值

所以它转到该函数的其他部分

    if (result) {
        return true;
        }
   else {
           return false;
        }

并且其中返回 false,因此进一步执行不起作用 我想在完成 checkduplicateseq (ajax 调用)后更进一步

最佳答案

use a callback in your success function. you can pass the callback into your checkduplicateseq function, or just leave it in the global namespace and call it directly from your success function, or you can just inline that function altogether (defined inside success function)

<小时/>
checkduplicateseq(someCallback);

function someCallback () {
    return !!result
}

以及你的成功函数

success: function(response) {
    if (response.d == "1") {

        alert("Sequence Number already exist!");
        $("#ctl00_CPHMainPageLambda_txtSeqNo").attr('value', '')
        $("#ctl00_CPHMainPageLambda_txtSeqNo").focus();
        result = false;
    } else {
        result = true;
    }

    someCallback();
}
<小时/>

如果您要链接大量回调,最好的方法是研究 Promise,它允许您以顺序方式编写,而不是传递要稍后调用的内容

关于javascript - 如何停止函数处理直到ajax调用完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36350665/

相关文章:

javascript - 使用 jquery 添加延迟

javascript - Ajax GET 严重失败

javascript - 是什么阻止我的 jquery 函数执行 ajax 脚本

javascript - 如何提示从嵌入 map 进入 Google map 导航器页面打开 Google map 路线?

javascript - 网络表格 : add dynamically in javascript option to a dropdownlist

javascript - 当使用 www 时,我没有得到 api 结果,如果没有 www 使用,我会得到它们

javascript - 在哪里可以下载 Bootstraps popover.js?

javascript - 无法获取文本字段的值

javascript - 自动更新图像

javascript - Ajax 请求 header 保持事件状态