同步请求和异步请求

1、同步请求和异步请求的区别
同步请求:客户端向服务器发送请求-->等待服务器响应-->处理完毕返回,客户端浏览器没有做别的事情。
同步连接请求数据时,当数据还未请求成功之前,用户界面做任何操作都是无效的,都是不会响应的。只有当请求数据完毕之后,才会响应用户交互,所以通常会卡死主线程。

异步请求:通过事件触发请求-->服务器处理请求-->处理完毕返回,但是客户端浏览器可以接着做别的事情
当异步请求时,会有单独的子线程去请求数据,而主线程依然响应处理用户交互,所以此时用户交互得到处理,用户流畅操作,用户体验比较好,所以开发过程中最多的还是异步链接

同步——如果使用者在服务运行的过程中阻塞时崩溃了,当它重新启动时,将无法重新连接到正在进行的调用,所以响应丢失了。使用者必须重复调用过程,并且期望这次不会崩溃。
异步——如果使用者在发送了请求之后等待响应时崩溃了,当它重新启动时,可以继续等待响应,所以响应不会丢失。
2、GET请求和POST请求的区别
GET请求,请求直接跟在URL后,以问号开始。因为服务器以及参数都会出现在请求接口中,也就是请求参数也是接口的一部分,而POST请求在接口中只有服务器地址,而参数会作为请求提交给服务器。
因为GET请求会出现在请求接口中,所以信息容易被捕获,安全性低,POST请求参数封装在请求体中,作为二进制流进行传输,不易被捕获,安全性高。
GET在请求时,接口的字节数有限制,支持小数据的提交,而POST请求从理论上来讲没有限制性,虽然理论上对于GET请求与POST请求都可以提交请求,但是GET多用于从服务器请求数据,而POST多用于向服务器提交数据。
3、实例:
(1)(2)实例中ajax.open方法中,第3个参数是设同步或者异步。同步的情况 下,js会等待请求返回,获取status。不需要onreadystatechange事件处理函数。而异步则需要 onreadystatechange事件处理,且值为4再正确处理下面的内容。
readyState存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中
    4: 请求已完成,且响应已就绪
status     200: "OK"
        404: 未找到页面
(1)
function RequestByGet(nProducttemp,nCountrytemp)
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }             
    //Web page location.
    var URL="http://www.baidu.com/;
    xmlhttp.open("GET",URL, false);   //false 为同步请求
    //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=Shift_JIS")
    xmlhttp.send(null);
    var result = xmlhttp.status;
    //OK
    if(result==200)
    {
        document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
    }
    xmlhttp = null;
} 
(2)
function RequestByGet(nProducttemp,nCountrytemp)
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }  
               
    //Web page location.
    var URL="http://www.baidu.com/";
    xmlhttp.open("GET",URL, true);//true 异步请求
    xmlhttp.onreadystatechange = handleResponse;
    //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=UTF-8")
    xmlhttp.send(null);
}

function handleResponse()
{
    if(xmlhttp.readyState == 4 && xmlhttp.status==200)
    {
        document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
        xmlhttp = null;
    }
} 

async: 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。
(3)同步请求
 $.ajax({
                url : 'your url',
                data:{name:value},
                cache : false,
                async : false,
                type : "POST",
                dataType : 'json/xml/html',
                success : function (result){
                    do something....
                }
            });
(4)异步请求
       $.ajax({
                url : 'your url',
                data:{name:value},
                cache : false,
                async : true,
                type : "POST",
                dataType : 'json/xml/html',
                success : function (result){
                    do something....
                }
            });





在Ajax中,同步请求异步请求是两种不同的请求方式。 同步请求是指在发送请求后,浏览器会等待服务器返回响应后再继续执行后续的代码。也就是说,在同步请求中,浏览器会阻塞页面的加载用户的交互,直到服务器返回响应为止。 异步请求是指在发送请求后,浏览器不会等待服务器返回响应,而是继续执行后续的代码。当服务器返回响应时,浏览器会触发相应的事件处理程序来处理响应。在异步请求中,页面的加载用户的交互不会被阻塞,用户可以继续进行其他操作。 下面是一个示例代码,展示了同步请求异步请求的差别: ```javascript // 同步请求示例 var xhrSync = new XMLHttpRequest(); xhrSync.open('GET', 'https://example.com/api/data', false); // 第三个参数设置为false表示同步请求 xhrSync.send(); console.log(xhrSync.responseText); // 在请求完成后,直接获取响应内容 // 异步请求示例 var xhrAsync = new XMLHttpRequest(); xhrAsync.open('GET', 'https://example.com/api/data', true); // 第三个参数设置为true表示异步请求 xhrAsync.onload = function() { if (xhrAsync.status === 200) { console.log(xhrAsync.responseText); // 在事件处理程序中获取响应内容 } }; xhrAsync.send(); console.log('请求已发送'); // 在请求发送后,继续执行后续的代码 ``` 在上面的示例中,同步请求会阻塞代码的执行,直到服务器返回响应后才会继续执行后续的代码。而异步请求则不会阻塞代码的执行,可以在请求发送后继续执行后续的代码,待服务器返回响应时再触发事件处理程序来处理响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值