1
34
因此,考虑到这一点:
呼叫的顺序
解决方案? 同步XHR请求使请求同步而不是异步:
重组代码
将呼叫转移到
|
2
9
记住,当您提供回调函数时,重点是将回调的执行推迟到稍后,然后立即继续执行下一个回调函数。这是必要的,因为浏览器中的Javascript是单线程执行模型。强制同步执行是可能的,但它会在整个操作期间挂起浏览器。对于类似于$.getjson的情况,浏览器停止响应的时间非常长。 换句话说,你试图找到一种使用这种程序范式的方法:
当需要重构代码以使其更像这样流动时:
如果您希望保持回调函数的简单性,“do something”可能是对另一个函数的调用。重要的一点是,在执行代码之前,您要等到$.getjson完成。 您甚至可以使用自定义事件,以便您在$.getjson订阅issuesReceived事件之后放置的代码,并在$.getjson回调中引发该事件:
更新: 或者,您可以全局存储数据,并只使用自定义事件通知数据已被接收和全局变量已更新。
更新2: 对此作出回应:
应该避免使用同步Ajax调用阻塞浏览器的原因是 被阻止的javascript线程也会阻止浏览器中的其他所有内容。 包括其他选项卡甚至其他窗口。这意味着没有滚动,没有导航,没有任何东西。出于所有的意图和目的,似乎浏览器崩溃了。正如您所能想象的,一个以这种方式运行的页面是 重要的 给用户带来麻烦。 |
3
5
也许这工作对我有用……:)
希望它能帮助你…… :) |
4
4
你可以承诺:
这是一个非常直截了当的可行方法,可以让异步代码感觉更为必要。 |
5
1
但这是通过页面上的后续交互来完成的,我无法预见用户将要对回调中的JSON对象做什么。 回调是为用户与数据交互设置屏幕的机会。 您可以为用户创建或显示HTML,并设置更多回调。 大多数情况下,您的代码都不会运行。编写一个Ajax页面的所有内容都是考虑在什么时候可能发生哪些事件。 这是因为它是“ajax”而不是“sjax”。这是因为它很难从异步转换为同步。预计您将执行页面异步操作。 事件驱动的编程一开始可能会令人沮丧。 我已经在JS中完成了计算密集型的财务算法。即便如此,这也是一样的——你把它分成几个小部分,然后事件就超时了。 javascript中的动画也是事件驱动的。实际上,除非脚本反复放弃控制权,否则浏览器甚至不会显示移动。 |
6
-3
你只是碰到了范围问题。 简短回答:
长回答: Scoping issue in Javascript Javascript closure scoping issue |
Softly · 单选按钮未按预期取值 1 年前 |
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
assembler · Nextjs没有处理发布请求 1 年前 |
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
Toniq · javascript为php保存多维数组 1 年前 |