我想从一个网络服务器获取数据,它必须由不同的功能处理,直到显示出来。我的问题是,当xmlhttprequest是异步的,那么处理函数已经被调用,但数据不可用。我如何确保异步调用完成? 我知道readyState和状态属性。如果响应需要更长时间,则同步呼叫无助于冻结浏览器。我只能使用纯JavaScript,处理数据的函数只能稍微改变。如何确保Xmlhttprequest(异步)完成?
编辑:
以下结构是我的问题(抽象,在现实中多个不同版本的情况发生了):
- 功能loadData:不会的XMLHttpRequest(异步)
- 功能A:调用loadData ,先调用
- 函数B:调用loadData,调用第二个
- 函数C:调用A和D以及第一个调用
- 功能d:第一执行一些计算
- 功能:显示HTML元素基于输入
- 功能秒:显示其他HTML元素
实施例的程序运行:
- JS自动调用功能A显示图表
- 用户按下按钮并调用功能B,显示不同的图表
- 用户按下不同的按钮调用函数C
问题:(?这可能是由新的参数来识别) 在功能上,功能首先需要的数据,但不能从loadData的onreadystatechange因为有几个不同的上下文中被调用例如函数B的调用。
我认为只有通过更改onreadystatechange中loadData和条件语句的新参数的结构才能实现,然后onreadystatechange会调用需要来自Web服务器的不同函数。不幸的是,在调用另一个函数之前,将包括部分计算或完成的工作(来自函数A,B,C)。这基本上打破了逻辑分离。 是否有任何其他方式在现有代码中需要更少的更改?
这当然有效。但是一个特定的功能非常棘手。它被在不同情况下调用的几个函数使用。因为我认为没有简单的解决方案,但建立了不同的结构 – John
虽然你的回答是正确的,但我想看看在接受之前是否有其他方式可能会有人知道。我不能投票你的答案,因为我没有足够的声誉。 – John