关于http 请求的同步与异步调用

这是一个常见的问题,也是一个容易搞混的问题。这里先说明我个人判断同步请求还是异步请求的依据:所调用的请求(某个url),阻塞了后续代码的执行则为同步,反之则为异步。

同步与异步的概念:

同步、异步常常用来描述一次方法调用过程。

同步:方法一旦调用,调用者必须等待方法的返回结果后才能进行后续的操作。

异步:调用者不必等待方法的返回结果,也能进行后续的操作。而,异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。

几种常见情况的说明:

1.html中的a标签与ajax 请求

a. <a href='url'>xx</a> 这种写法产生的网络请求可以认为是异步的,但是没意义,因为a标签是个请求链接,点击之后网页跳转。测试 window.location.href='url'(a标签的js 实现),结果是异步的。

	// 按标签同步
	function a_tb(){
		tips.val("a标签同步测试");
		window.location.href="ht";
		alert("看不出来同步的效果,调用者也没有阻塞");//姑且认为是一种 异步
		tips.val(tips.val()+" \n测试结束");
		
	}

b.ajax 请求既可以同步也可以异步,关键在于async 参数的配置--true 异步,false 同步。

//  ajax 默认异步方法调用
	function ajax_tb(){
		tips.val("ajax 同步测试");
		$.ajax({
			"url":"ht",
			//"type":"GET",
			"type":"POST",
			"success":function(text){
				tips.val(tips.val()+"\n调用返回结果:"+text);
			},
			"error":function(text){
			
			},
			"async":false//设置同步请求
		});
		tips.val(tips.val()+"\najax同步测试结束");
	}

执行结果:

2.还有不同程序语言实现的http请求,要根据实际情况来判断是同步还是异步。

2.1 java http 异步请求库:

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpasyncclient</artifactId>
            <version>4.1.1</version>
</dependency>

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值