Javascript jQuery.ajax()中的Rewite fetch函数
当前的解决方案使用fetch 我们目前已经实现了这个功能,并且工作得很好Javascript jQuery.ajax()中的Rewite fetch函数,javascript,jquery,ajax,xmlhttprequest,fetch-api,Javascript,Jquery,Ajax,Xmlhttprequest,Fetch Api,当前的解决方案使用fetch 我们目前已经实现了这个功能,并且工作得很好 function setupCKConnect() { fetch('ajax/myfile.php?id=1234567') .then(response => { response.json() .then(json => { function1(json) .then(data => {
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调用检索函数1中使用的json响应。
函数1然后侦听另一个函数的回调,有时长达10分钟
函数1接收回调并执行后,函数2轮询数据库以获取结果。
为什么我们需要改变
不幸的是,我们的客户群中似乎有很大一部分使用不支持fetch的设备
因此,我尝试使用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完成。
有人能解释一下如何在函数1完成之前停止函数2的执行吗
因此ajax响应返回一个延迟对象,而不是承诺。这些看起来很相似,但将两者混合在一起可能是不可靠的。我创建了一个基于的示例来说明我的意思
我敢猜测function1json会返回一个承诺。延迟得到了一个值,返回了未解决的承诺,并认为很好。让我们继续前进,您或者需要异步/等待,或者调用该函数调用,以便暂停执行其他任何操作。如果您修复了原始代码的缩进,您将看到问题。对function2的调用不在a中。然后,它链接到第一个。然后,对function1的结果调用它。而且.catch也是从那里调用的,而不是从fetch调用的,所以您不能使用.fail作为替换
function setupCKConnect() {
fetch('ajax/myfile.php?id=1234567')
.then(response => {
response.json()
.then(json => {
function1(json)
.then(data => {
function2()
})
.catch(data => {
setupCKConnect()
});
});
});
};
因此,您需要类似地构造jQuery代码
function setupCKConnect() {
$.ajax({
type: "GET",
dataType: 'json',
url: 'ajax/myfile.php?id=1234567'
}).done(function(data) {
function1(data)
.then(function(data) {
function2()
})
.catch(function() {
setupCKConnect(data)
});
})
};
这假设function1与原始版本相似,因此它返回的承诺与原始版本相同。您能修复语法吗?拥有序列是非法的;。近json;。那么,是的,对不起。。。修正了你的浏览器支持有多远?这个polyfill负责IE 10和11。它主要是iPhone上safari的旧版本,这就是问题所在。。。我们的许多客户都有2017年之前的iPhone,而且似乎从未更新过任何内容