首页 > 软件开发 > JQUERY >

Jquery中ajax的同步与异步

来源:互联网 2023-03-16 23:53:58 版权归原作者所有,如有侵权,请联系我们

今天调试一个网页时,发现函数返回时值是正确的,但调用函数的结果怎么也不正确。想了一下才发现,调用函数时,使用jquery中的post方法是异步调用的。mth办公区 - 实用经验教程分享!

也就是说函数返回时,调用函数早就执行完成了。所以即使被调函数的返回值是正确的,也无法正确的处理了。mth办公区 - 实用经验教程分享!

方法/步骤

  • 1

    异步的调用方式:mth办公区 - 实用经验教程分享!

    开始我写的函数执行的过程是这样的(post会被异步的进行操作):mth办公区 - 实用经验教程分享!

    $.post("logic.php", {mth办公区 - 实用经验教程分享!

    type: "query_sql_get_data",mth办公区 - 实用经验教程分享!

    sql: sqlmth办公区 - 实用经验教程分享!

    }, function (result) {mth办公区 - 实用经验教程分享!

    var data_list = eval("(" result ")");mth办公区 - 实用经验教程分享!

    return (data_list.length > 0);mth办公区 - 实用经验教程分享!

    });mth办公区 - 实用经验教程分享!

    Jquery中ajax的同步与异步mth办公区 - 实用经验教程分享!

  • 2

    异步的调用方式的后果:mth办公区 - 实用经验教程分享!

    在被调函数中,我需要用上面代码的返回值来看数据库是否有重复数据。mth办公区 - 实用经验教程分享!

    但由于是异步调用,等post返回时,我的调用函数早就执行完成了,根本等不到被调函数的返回值。所以结果超出了预期。mth办公区 - 实用经验教程分享!

    Jquery中ajax的同步与异步mth办公区 - 实用经验教程分享!

  • 3

    post无法设置同步:mth办公区 - 实用经验教程分享!

    POST方法在Jquery中默认是不支持同步调用的。如果非要使用同步方法,可以设置ajax的全局变量:mth办公区 - 实用经验教程分享!

    mth办公区 - 实用经验教程分享!

    $.ajaxSetup({mth办公区 - 实用经验教程分享!

    mth办公区 - 实用经验教程分享!

    mth办公区 - 实用经验教程分享!

    async :falsemth办公区 - 实用经验教程分享!

    mth办公区 - 实用经验教程分享!

    mth办公区 - 实用经验教程分享!

    });mth办公区 - 实用经验教程分享!

    mth办公区 - 实用经验教程分享!

    async为true表示异步,也是默认值。为false时表示同步。mth办公区 - 实用经验教程分享!

    Jquery中ajax的同步与异步mth办公区 - 实用经验教程分享!

  • 4

    修改全局变量的隐患:mth办公区 - 实用经验教程分享!

    按上述方法修改全局变量后,你的整个站点代码都将受到影响。也就是说全部ajax请求都会按照同步的方式来处理。这可能是你不希望看到的。mth办公区 - 实用经验教程分享!

    当然你可以在使用完成后再把全局变量改过来。不过这似乎也不太好。应该还有更好的办法。mth办公区 - 实用经验教程分享!

    Jquery中ajax的同步与异步mth办公区 - 实用经验教程分享!

  • 4该信息未经许可获取自百度经验
  • 5

    通过ajax直接调用:mth办公区 - 实用经验教程分享!

    $.ajax({mth办公区 - 实用经验教程分享!

    type : "post",mth办公区 - 实用经验教程分享!

    url : "logic.php",mth办公区 - 实用经验教程分享!

    data : data, //var data = {"type": "query_sql_get_data", "sql": sql};mth办公区 - 实用经验教程分享!

    async : false, // 同步调用mth办公区 - 实用经验教程分享!

    success : function(result){mth办公区 - 实用经验教程分享!

    var data_list = eval("(" result ")");mth办公区 - 实用经验教程分享!

    hasError = (data_list.length > 0);mth办公区 - 实用经验教程分享!

    }mth办公区 - 实用经验教程分享!

    });mth办公区 - 实用经验教程分享!

    return hasError; // 注意返回要在这里,不要在成功时的回调函数时,否则调用函数无法得到正确的返回值。mth办公区 - 实用经验教程分享!

    Jquery中ajax的同步与异步mth办公区 - 实用经验教程分享!

  • 6

    难以发现的问题:mth办公区 - 实用经验教程分享!

    类似这种问题,如果没有相关经验时,可能不容易发现。因为在调试单个函数时,你得到的结果都是正确的。甚至你可能怀疑是否浏览器出了问题。mth办公区 - 实用经验教程分享!

    所以有时除了单步跟踪外还应该注意函数的调用栈等一些额外的信息,不断的积累经验。mth办公区 - 实用经验教程分享!

    Jquery中ajax的同步与异步mth办公区 - 实用经验教程分享!

  • 7

    同步异步如何用:mth办公区 - 实用经验教程分享!

    ajax的作用其实是为了解决页面的局部刷新的。所以我们通常使用的都是异步请求。这也是为什么以异步作为默认值的原因。但当我们处理处理逻辑相关的业务时(特别是有先有顺序那种),就要考虑同步的情况了。mth办公区 - 实用经验教程分享!

    Jquery中ajax的同步与异步mth办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!mth办公区 - 实用经验教程分享!


    标签: JQUERY

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号