相关疑难解决方法(0)

jQuery延迟对象与嵌套的ajax调用

我的情况是我的ajax调用必须按特定顺序执行.我在其他情况下使用过jQuery Deferred对象,但似乎无法找到使这种行为适当的方法.

我有一个函数,它ajax在它的生命周期中执行许多请求.某些请求将在成功回调其他请求期间执行.

我的问题:有没有办法将所有嵌套的延迟对象返回到原始$.when调用?

一个简化的例子是:

function nestedAjax() {
    $.get("/", function(){
        console.log("First ajax done.");
        $.get("/", function(){
            console.log("Second ajax done.");
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

我试图nestedAjax使用这个功能,$.when()$.done()喜欢这样:

$.when(nestedAjax()).done(function(){
    console.log("Complete");
});?
Run Code Online (Sandbox Code Playgroud)

控制台输出读数:

> First ajax done.
> Second ajax done.
> Complete.
Run Code Online (Sandbox Code Playgroud)

我可以返回第一个get实现这个目的:

> First ajax done.
> Complete.
> Second ajax done.
Run Code Online (Sandbox Code Playgroud)

但显然这不是我要求的.任何帮助,将不胜感激.

javascript jquery promise jquery-deferred

18
推荐指数
2
解决办法
1万
查看次数

使用jQuery延迟异步任务

我是JavaScript中的延迟类的新手,并希望实现一个循环遍历表单并逐个提交的函数.

看起来Deferred类是实现这一目标的方法.

我试着按照这个答案,但由于某种原因,我的实现开始,等待3秒并完成.我希望它每隔3秒显示一个不同的表单名称,直到完成所有表单.

我究竟做错了什么?的jsfiddle

function syncAll() {
        
  var promises = [];
  var forms = [
    {'name':'form 1'},
    {'name':'form 2'},
    {'name':'form 3'}, 
    {'name':'form 4'}];

  $.each(forms, function (index, value) {
    var def = new $.Deferred();
    setTimeout(function () {
      $("#output").html("Syncing: " + value.name);
      def.resolve({ 'message': 'finito!' });
    }, 3000);
    promises.push(def);

  });

  return $.when.apply(undefined, promises).promise();
}
    
    
    $.when(syncAll()).done(function(response){
        $("#output").html(response.message);
    });
    /*
    syncAll().done(function (response) {
      $("#output").html(response.message);
    }));
    */
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output">Start</div>
Run Code Online (Sandbox Code Playgroud)

javascript jquery deferred

4
推荐指数
1
解决办法
184
查看次数

标签 统计

javascript ×2

jquery ×2

deferred ×1

jquery-deferred ×1

promise ×1