JS如何等ajax执行完毕后再继续执行后续函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS如何等ajax执行完毕后再继续执行后续函数相关的知识,希望对你有一定的参考价值。

项目中有大量功能类似,但具体实现有差异的有ajax请求的函数,假如为a(),现在我新加入了b(a,c)函数,需要先调用a()函数,等a()执行完成后再调用c()函数,规定了不能更改a()函数的内容,所以不能使用回调方法了。

参考技术A Jquery等待ajax执行完毕再继续执行下面代码的效果,具体代码如下,其实就是将 jquery ajax 函数的 async 参数设置为 false 即可,该参数默认为 true 参考技术B

利用JQuery的Promise用法实现,var promise = $.ajax("/myServerScript1");

promise.then(successFunction)。

拓展:

1、国内翻译常为“阿贾克斯”和阿贾克斯足球队同音。Web应用的交互如Flickr,Backpack和Google在这方面已经有质的飞跃。这个术语源自描述从基于Web的应用到基于数据的应用的转换。在基于数据的应用中,用户需求的数据如联系人列表,可以从独立于实际网页的服务端取得并且可以被动态地写入网页中,给缓慢的Web应用体验着色使之像桌面应用一样。

2、ax的核心是javascript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

参考技术C 利用JQuery的Promise用法实现追问

能说详细一点吗?谢谢

追答

var promise = $.ajax("/myServerScript1");

promise.then(successFunction);

追问

我现在b()方法的参数有a,是不是a方法必须要返回Deferred对象才行?

追答

嗯,必须要Deferred对象,你可以用$.Deferred(a)方法来创建Deferred对象,a是方法名。
$.Deferred(a).then(c)

本回答被提问者和网友采纳
参考技术D http://api.jquery.com/promise/
可以参考JQuery中的promise用法,非常方便用起来也很好看,好读。追问

我看了下,例子是对某个dom对象用的promise,我这里需要在b方法中确认a方法执行完毕,能不改动a方法吗?具体怎么弄呢?谢谢了

如何使“主线程”等待“子线程”执行结束后再继续执行

觉得设置一个标记比较好 boolean flag=false;
例如一个子线程:
class childThread extends Thread

.....
while(true)

public void run()

.......
flag=true//当子线程运行完成后标记设为true




然后根据该标记的值判断子线程是否执行。

你可以这样写:
....
childThread ct=new childThread();

ct.start();

if(ct.flag == false)

Thread.sleep(10);[color=#00FF00]当子线程没有执行完毕,就让主线程等待[/color].....

如果不设置标记判断 而是直接让主线程 Thread.sleep(xxx)睡眠是不合理的。
原因是:
由于主线程和子线程是并发运行的 睡眠的时间不好控制 如果时间太短 可能子线程没有运行完主线程就又开始运行了。如果时间太长 影响程序的执行效率 所以这个时间是不好控制的。
上面有的直接 Thread.sleep(100);完全是想当然的想法。 直接这样写有可能是会出错的 你可以试下。
所以我觉得还是设置一个标记比较好。
参考技术A 在主线程里调用子线程,这样“子线程”执行结束后,才会继续执行主线程的后续程序。

以上是关于JS如何等ajax执行完毕后再继续执行后续函数的主要内容,如果未能解决你的问题,请参考以下文章

如何使“主线程”等待“子线程”执行结束后再继续执行

线程池: 等待线程池内所有线程执行完毕后再继续任务

如何使“主线程”等待“子线程”执行结束后再继续执行

vb中shell使批处理完成后再执行后续指令

Jquery等待ajax执行完毕继续执行(断点调试正常,运行异常)

Ajax同步异步请求