多个ajax请求的同步异步问题分析

本文通过实例分析了Ajax同步与异步的区别,并提供了将异步请求转换为同步或在异步请求中互相调用的方法,帮助理解并解决实际开发中遇到的同步问题。
摘要由CSDN通过智能技术生成

【前言】

  最近做番茄的项目,在一个ajax执行前,需要判断另一个ajax的执行情况,如果第一个执行成功,让第二个执行。当时运行的时候发现,这2个ajax,同时执行。这就不能满足我的需求了,于是了解了一下ajax的同步异步问题,顺利解决了我的疑惑


【分析同步、异步】

同步:当请求发出后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才执行后续的代码。

  生活中例子:比如你烤面包,把面包放进烤箱里边,然后你就在那里傻等着,一直等到面包烤好了,你取出面包,然后在开始做下面的事情。

异步:当请求发出后,浏览器可以继续执行下面的事情,不必一直等待这个事情执行完在执行其他的。

  生活中例子:比如你烤面包,把面包放进烤箱里边,然后你去做其他的事情了,当烤箱响铃提示你烤好了,你取出面包,再开始做下面的事情


【代码解析】

一、改为同步后的方法(其中一个方法设置为异步)

function addLabel() {
    //获得输入框的内容
    var labelText = document.getElementById("labelText").value.trim();
    var result1 = selectLabel(labelText);//调用另一个方法
    if (result1 == "yes") {
        $.ajax({
            type: "post",
            url: "/Label/InsertLabel",
            data: "labeltext=" + labelText,
            dataType: "json",
            success: function (data) {
                if (data == "1") {
                    alert("注册成功!");     
                }
                else {
                    alert("注册失败,请重新注册!");
                    return;
                }
            },
            error: function (data) {
                alert("系统出错了,请联系管理员!");
            }

        })
    }
    else {
        return;
    }
    
}
function selectLabel(a) {
    //获得输入框的内容
    //var labelText = document.getElementById("labelText").value.trim();
    //判空
    var test = null;
    if (a == "") {
        alert("请输入标签名称");
        test ="no";
    }

    $.ajax({
        type: "post",
        url: "/Label/SelectLabel",
        async:false,//设置同步、异步的参数【false同步、true异步】
        dataType: "json",
        data: "labeltext=" + a,
        success: function (data) {
            if (data.length != 0) {
                alert("重复标签");
 
                test = "no";
            } else {
                test = "yes";
            }
        },
        error: function (data) {
            alert("系统出错了,请联系管理员!");
            test = "no";
        }
    })
    return test;
}

二、在一个ajax返回的数据中,调用另一个ajax方法(这里面的方法都为异步也可以)

function selectLabel() {
    $.ajax({
        type: "post",
        url: "/Label/SelectLabel",
        //async:false,//设置同步、异步的参数【false同步、true异步】
        dataType: "json",
        data: "labeltext=" + a,
        success: function (data) {
            if (data.length != 0) {
                function();//在这里调用零一个方法
        },
        error: function (data) {
            alert("系统出错了,请联系管理员!");
            test = "no";
        }
    })
    return test;
}



【总结】

  设置同步异步:async:true异步,false同步

  很多东西,知道原理之后就变得简单很多。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值