Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery.ajax()中的Rewite fetch函数_Javascript_Jquery_Ajax_Xmlhttprequest_Fetch Api - Fatal编程技术网

Javascript jQuery.ajax()中的Rewite 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 => {

当前的解决方案使用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调用检索函数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,而且似乎从未更新过任何内容