【发布时间】:2019-12-23 04:19:48
【问题描述】:
当前使用 fetch 的解决方案
我们目前已实现此功能并且运行良好。
function setupCKConnect() {
fetch('ajax/myfile.php?id=1234567')
.then(response => {
response.json()
.then(json => {
function1(json)
.then(data => {
function2()
})
.catch(data => {
setupCKConnect()
});
});
});
};
上面代码的解释
- 对 myfile.php 的 ajax 调用检索在 function1() 中使用的 json 响应。
- function1() 然后监听来自另一个函数的回调(有时长达 10 分钟)
- function1() 收到回调并执行后,function2() 会轮询数据库以获取结果。
为什么我们需要改变
不幸的是,我们的客户群中似乎有很大一部分使用不支持获取的设备。
因此我尝试使用 jQuery.ajax() 重写它。
我知道这似乎是倒退,但在这种情况下是必要的。
新代码
下面是我到目前为止的代码。请注意,我没有嫁给 jQuery,因为有人有更好的选择。
到目前为止,我有这个代码:
function setupCKConnect() {
$.ajax({
type: "GET",
dataType: 'json',
url: 'ajax/myfile.php?id=1234567'
}).done(function(data) {
function1(data)
}).done(function() {
function2()
}).fail(function(jqXHR, textStatus, errorThrown) {
setupCKConnect()
});
};
新代码的问题
新代码实际上运行良好,除了一个小点
- function2() 立即执行,而不是等待 function1() 完成。
谁能帮助解释如何在 function1() 完成之前停止 function2() 的执行
感谢帮助
【问题讨论】:
-
你能修正你的语法吗?在
json();.then(附近有序列;.是非法的。 -
是的,抱歉...已修复
-
github.com/github/fetch 您的浏览器支持有多远?这个 polyfill 负责 IE 10 和 11。
-
问题在于 iPhone 上的 safari 主要是旧版本......我们的许多客户都有 2017 年之前的 iphone,但似乎从未更新过任何东西
标签: javascript jquery ajax xmlhttprequest fetch-api