如何在选择条件之前等待 JQUERY AJAX 响应

Posted

技术标签:

【中文标题】如何在选择条件之前等待 JQUERY AJAX 响应【英文标题】:How to wait for JQUERY AJAX response before choosing condition 【发布时间】:2011-08-17 14:34:57 【问题描述】:
$("#submit").click(function () 
    var boolError = false;

    CheckForm("#email");
    CheckPhone("#phone");

    if (boolError == true) 
        console.log('error');
     else 
        console.log('here');
        // $("#form").submit();
    
);

问题是它总是返回console.log('here');

有没有办法等待 CheckForm 和 CheckPhone。来自 CheckForm 函数的 AJAX 调用:

$.ajax(
    type: "POST",
    url: "/webservice/user.asmx/CheckForm",
    data: "'type':'" + var_type + "', 'value':'" + var_value + "'",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    error: function (XMLHttpRequest, textStatus, errorThrown)  ,
    success: function (data) 
        var obj = data.d;
    
);

【问题讨论】:

【参考方案1】:

您必须在 ajax 调用的回调中执行此操作 - 如下所示:

$.ajax(
    type: "POST",
    url: "/webservice/user.asmx/CheckForm",
    data: "'type':'" + var_type + "', 'value':'" + var_value + "'",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    error: function (XMLHttpRequest, textStatus, errorThrown) 
      console.log('error');
    ,
    success: function (data) 
      console.log('here');
    
);

使用 AJAX 需要非线性编程——回调比比皆是。

您可以在 ajax 调用中设置选项使其不异步(即 jQuery 将等待它完成),但这会使您的应用程序/网站无法正常运行。

【讨论】:

正确。在编写 javascript 和 AJAX 时必须使用回调。【参考方案2】:

尝试将async 设置为false:请参阅下面的编辑

$.ajax(
    type: "POST",
    async: false,
    url: "/webservice/user.asmx/CheckForm",
    data: "'type':'" + var_type + "', 'value':'" + var_value + "'",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    error: function (XMLHttpRequest, textStatus, errorThrown)  ,
    success: function (data) 
        var obj = data.d;
    
);

这将使 AJAX 调用阻塞,因此浏览器将等待它完成后再继续。当然,我仍然不确定这与在父条件中检查的布尔值有何关系。也许有些代码你没有给我们看......


编辑: :::sigh::: 当我发布这个答案时,我还年轻又愚蠢,实际上已经忘记了这一切。出于历史目的,我将上述信息保持不变(因为它似乎对某些人有所帮助,或者至少他们认为有所帮助),但请理解这不是正确的方法

使异步调用同步并阻塞执行在各方面都是不正确的。不要这样做。相反,构建逻辑以响应异步操作。在这个问题的情况下,对 console.log() 的调用应该发生在 AJAX 调用的成功(或错误)处理程序中,而不是在调用该调用之后的代码中。

【讨论】:

【参考方案3】:

是的,你把条件放在了成功函数中。

 success: function (data)  if (...)   else           

var obj = data.d;
    

【讨论】:

【参考方案4】:

你在哪里设置boolError=true??这就是为什么它总是返回here

你必须在 checkForm

中改变这样的逻辑
$.ajax(
    type: "POST",
    error: function (XMLHttpRequest, textStatus, errorThrown)  boolError==true;,
    success: function (data) 
        var obj = data.d;
    
);

【讨论】:

以上是关于如何在选择条件之前等待 JQUERY AJAX 响应的主要内容,如果未能解决你的问题,请参考以下文章

Jquery:在返回之前等待回调

将 Ajax JQuery 选择器保存在数组中

如何给JQUERY+AJAX加上加载等待效果

Jquery Ajax 如何实现动态加载Repeater 或者 DataList

如何解决jquery+ajax 网页title总时显示成"正在等待..."

当 Ajax 响应来自使用 select2 的 laravel 控制器时,如何检查 JQuery 附加选项中的条件?