标签: jquery-deferred

如何将变量绑定到jquery ajax请求?

这是不言自明的:

while (...) {
    var string='something that changes for each ajax request.';
    $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'}).done(processData);
}
function processData(data) {
    // get string into here somehow.
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我需要以某种方式string进入processData.我不能创建一个全局变量,因为string每个ajax请求都不同.所以,问题是,我如何绑定string到我的ajax请求,以便我可以从中访问它processData

我真的不想附加string到查询并让服务器返回它,但如果这是我唯一的选择,我别无选择.

提前致谢.

javascript data-binding ajax jquery jquery-deferred

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

jQuery 中延迟对象中的resolved 和rejected 是什么意思?

我在这里问了一个问题:如果互联网连接可用,则刷新页面,然后@Fabrizio Calderan 使用延迟对象实现提供了一个非常简洁的解决方案,如下所示:

setInterval(function() {
    $.when(
        $.ajax({ 
            url  : "/favicon.ico", /* or other resource */
            type : "HEAD"
        })
    )
    .done(function() {
        location.reload();
    });
}, 120000); /* 120000 ~> 2 minutes */
Run Code Online (Sandbox Code Playgroud)

我的问题是:

因为 ajax 调用将返回 jqXHR ;如果ajax调用失败怎么办?那么ajax的返回类型是什么?仍然是 jqXHR 或 UNDEFINED 或 NULL

并且由于ajax的调用将返回jqXHR,它是一个延迟对象;我可以得出以下结论吗:

延迟对象已解析 ==> jqXHR

或被拒绝==>未定义

问候

javascript ajax jquery jquery-deferred

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

在.when()中使用deffered对象时,如何使用.when().then()来触发函数?

我有一个页面,其中我有一个可变数量的AJAX调用,这些调用是在一个公共事件上触发的.AJAX调用本身是更新SQL数据库中的相关字段.完成所有调用后,我想刷新页面,以便它现在反映刚刚进行的更改.

我在这里使用了以下问题/答案到目前为止... jQuery当每个完成时,触发函数

到目前为止,这是我的代码:

var team_update = function(e) {
    var $items = $('.sortable-items');
    var XHRs = [];

    $items.each(function(){
        var team_id = $( this ).attr("id");
        var data =  {
            tid: team_id,
            users: $('#' + team_id).sortable('toArray')
            };

        XHRs.push(
            $.ajax({ 
                type: "POST", 
                url: "update.php", 
                data: data, 
                complete: function(data){
                } 
            })  
        );

    });

    $.when(XHRs).then(function(){
        console.log('Refreshing Screen');
        $('#content-wrapper').load( 'index.php' );
    });

}
Run Code Online (Sandbox Code Playgroud)

我期待发生的事情是$('#content-wrapper').load( 'index.php' );,一旦我的所有ajax()请求完成,就会触发.然而,似乎正在发生的事情是,一旦所有请求都已发送,回调就会触发,不一定在它们完成之后,因此有时我的页面更新仍然有"旧"数据.

下图显示了我在顶部的初始页面加载,可以忽略.显示该问题的接下来的4个条目.有3个POST请求是我的3个ajax调用来更新数据库,最后的GET是页面刷新.在发送了所有3个ajax调用之后,页面刷新GET将触发,但它不会等待最后一个ajax调用在它触发之前完成.因此,它会在前一个ajac调用完成更新数据库之前完成旧数据.

Firebug时间轴

我在这做错了什么?

ajax jquery jquery-deferred

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

如何使用angular和JavaScript保证返回一些数据?

我正在尝试从本地存储中获取一些数据,但是我想使用的日期是ready。就像是:

// this belongs to a Helper factory
getData: function(){
        var deferred = jQuery.Deferred();
        setTimeout(function(){
            var data = {
                description: localStorageService.get('description'),
            };
            deferred.resolve()
        }, 10);
        return deferred.promise();
  },

// I set it up so that in the controller I can do
// $scope.data = Helper.getData();
Run Code Online (Sandbox Code Playgroud)

类似于我的示例,我只想在data对象具有description本地存储后返回它

我正在使用angularjs,因此{{data}}一旦解决诺言,我想在我的视图中显示。例如可能使用ng-hide或类似的东西。

无论如何,我的问题是关于建立那个诺言。

有任何想法吗?

javascript local-storage jquery-deferred angularjs angular-promise

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

在jquery ajax之后如何做其他jquery事情

我正在使用PHP.我想完成jQuery AJAX流程,(完成流程并将数据返回主页面).

然后做下一个jQuery的事情.关于如何做的任何想法?

$.ajax({
  url: "page1.php", 
  dataType: "html",
  type: 'POST', 
  data: "value=" + value, 
  success: function(data){
    //some process
  }
});//ajax1
$.ajax({
  url: "page2.php", 
  dataType: "html",
  type: 'POST', 
  data: "value=" + value, 
  success: function(data){
    //some process
  }
});//ajax2
$.ajax({
  url: "page3.php", 
  dataType: "html",
  type: 'POST', 
  data: "value=" + value, 
  success: function(data){
    //some process
  }
});//ajax3

// finish all the 3 ajax process, do the below code
$(".page").css('display','block');
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-deferred

3
推荐指数
1
解决办法
903
查看次数

推迟为JQuery加载解析JavaScript

在使用Google Page Speed测试网站时,我发现我无法摆脱Defer parsing of JavaScript.我删除了所有的javascript代码,只剩下一个小代码

<script defer type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $('.test').click(function(){
            $(this).slideDown();
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

或者甚至没有任何jquery代码,只需将jQuery文件单独加载为

<script defer type="text/javascript" src="jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

仍然得到警告Defer parsing of JavaScript.

javascript performance jquery pagespeed jquery-deferred

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

有条件地添加到jQuery .when

当我的页面加载时,我会进行一次AJAX调用,然后根据页面上的内容进行另一次调用.我想在两者结束时调用一个函数; 我该怎么做?

var dfd = $.when( $.ajax(...) );

if( $("type").val() == "something" ) {
  dfd.when( $.ajax(...) );
}

dfd.then(function() { 
   // final code
});
Run Code Online (Sandbox Code Playgroud)

我找不到更多关于添加$.when "conditionally"或"稍后"的内容,因为这些搜索词太接近于承诺本身的原始目的,所以我只是得到了标准用法$.when(a, b).then(c)

谢谢

jquery promise jquery-deferred .when

3
推荐指数
1
解决办法
1485
查看次数

如果延迟已经解决,jquery延迟回调是否同步?

我猜答案是肯定的,但代码并不是最简单的解密.它在文档中

使用deferred.then(),deferred.always(),deferred.done()或deferred.fail()添加到对象的任何回调都将排队等待稍后执行.调用deferred.resolve()或deferred.resolveWith()会将Deferred转换为已解析状态,并立即执行所有已设置的doneCallback.

但这并未明确涵盖将回调附加到已解决的Deferred的情况.

jquery asynchronous promise jquery-deferred

3
推荐指数
1
解决办法
631
查看次数

如何使用TypeScript和jquery.d.ts创建通用(void)JQueryDeferred对象

我正在使用来自DefinitelyTyped repo的jquery.d.ts(使用tsd).它似乎是"官方"jquery键入,因为许可证标题表示它是由Microsoft创建的.

现在,我偶尔需要创建一个延迟对象,不需要将任何参数传递给它.resolve().reject()方法,我无法弄清楚如何使用静态类型.

我目前正在使用一种解决方法:我正在创建延迟通过JQueryDeferred<boolean> dfd = $.Deferred()并解决它,dfd.resolve(false)虽然我不需要传递一个布尔值.从jquery.d.ts文件中我只能找到一个JQueryDeferred<T>声明,但不能找到一个声明的声明(就像这样,JQueryDeferred<void>但这不是有效的TypeScript语法).

它是如何"正确的方式"(TM)完成的?

jquery jquery-deferred typescript

3
推荐指数
1
解决办法
4302
查看次数

如何解决for循环中的所有promise?

关于承诺的另一个问题.我有这种情况:

Service.prototype.parse = function (data) {
    var deferred = $.Deferred();
    var arr      = [];
    for (var i = 0; i < data.length; i++) {
        var details = new Details();
        $.when(details).then(function (data) {
            arr.push(data);
            deferred.resolve(arr);
        });
    }

    return deferred.promise;
};
Run Code Online (Sandbox Code Playgroud)

代码中的其他地方:

...
$.when(parse()).then(function (resp) {
   //...
});
Run Code Online (Sandbox Code Playgroud)

承诺在某些时候得到解决,但最初resp的长度为1.

如何等待parse()解决所有问题并返回数组?

javascript jquery promise jquery-deferred

3
推荐指数
1
解决办法
458
查看次数