Ajax请求中的async:false/true的作用(ajax返回值在外部调用问题)

Ajax请求中async属性的设置对浏览器行为有显著影响。当async设为false时,请求变为同步,浏览器会阻塞直到请求完成。而设为true(默认值)时,请求为异步,可能导致后续操作在请求完成前执行。在处理异步返回值时,可以通过设置async:false使请求同步,或者在success回调内部处理所需参数。两种方法适用于不同场景,根据项目需求选择合适的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

test.html
<a href="javascript:void(0)" onmouseover="testAsync()">

asy.js
function testAsync(){
    var temp;
    $.ajax({
        async: false,   //同步请求
        type : "GET",
        url : 'tet.php',
        complete: function(msg){
            alert('complete');
        },
        success : function(data) {
            alert('success');
            temp=data;
        }
    });
    alert(temp);
}

tet.php
<?php
    echo "here is html code";
    sleep(5);
?>

说明
async: false,(默认是true);

如上:false为同步,这个 testAsync()方法中的Ajax请求将整个浏览器锁死,只有tet.php执行结束后,才可以执行其它操作。

当async: true 时,ajax请求是异步的。
但是其中有个问题:testAsync()中的ajax请求和其后面的操作是异步执行的,那么当tet.php还未执行完,就可能已经执行了 ajax请求后面的操作,
如: alert(temp+'   end'); 然而,temp这个数据是在ajax请求success后才赋值的,结果,输出时会为空。


----------------------------------------------------------------------------------------------------
由于ajax默认为异步调用,所以很少能直接拿到ajax的返回值。但有时候由于业务需要还必须要通过ajax来拿,那么我这里提供两种方案。具体方法:
1、就像通过
设置async:false让其异步变同步;
2、可以将接下来需要使用到的参数在success之内执行。
这两种方案,你根据你项目的具体实际选择一个。
使用第一种相对来讲,假如你对性能要求不是太大可以选择。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值