Tag: jquery deferred

何时使用deferred.reject()?

我很困惑何时使用deferred.resolve()和deferred.reject() 。 快速示例 var doSomething = function() { var deferred = $.Deferred(); if ( typeof myVar === “object” ) { // Do something with myVar – Start. deferred.resolve(); // Do something with myVar – End. } else { // myVar isn’t an object, but the function has finished executing // and that’s what I want […]

在触发第三个函数之前等待两个异步函数的结束(jQuery Deferred?)

我试图理解jQuery的Deferred ,但是尽管有样本,我无法实现我想做的事情。 所以,我想异步调用2个函数,当BOTH结束时,再调用另一个函数。 这是我的代码 function1(); function2(); function3(); function1()和function2()对我的ASP.NET应用程序进行ajax调用,它们完美地工作。 它们必须在function3()开始之前结束。 我正在阅读并再次阅读文档,但function3()不等待其他两个人的结束。 你能否提供我的一些样本以便我了解Deferred ? 我真的需要他们来完成我项目的一个重要部分。 非常感谢你。 奖金问题 我已经读过了.when延迟…有可能写一些 元素,比如运行function1() ,然后运行 function2() ……等等? UPDATE 关于function1()和function2()更多细节:它们非常相似,这里是它们的主体: function function1() { return $.ajax({ url : “@Url.Action(“MyMethod”, “MyController”)”, contentType : “application/json; charset=utf-8”, dataType : “json” }).done(function(data) { $.each(data, function(index) { pushDatas(data[index]); }) }).fail(function (result) { alert(“function1failed”); }); } function pushDatas(data) { if(!($.inArray(data, […]

在循环数组时延迟$ .when

我有以下代码: var arrOutfit = []; // will be filled … $.when( $.each(arrOutfit, function(key, sAdd) { $.post(‘/checkout/addArticle’, ‘sAdd=’ + sAdd + ‘&sQuantity = 1’); }); ).then() { // something } 但这不起作用。 我认为数组循环无效。 你可以看到我有多个ajax调用,我想只有一个回调,所以我知道,当所有的请求都完成了。 我怎样才能做到这一点? 任何想法将不胜感激。 最好的祝福

如何在自动调用的函数(如.ajax()的beforeSend())中正确使用jQuery Deferred / promise?

我正在努力扩展jQuery的ajaxPrefilter接口,为AJAX调用添加额外的function; 即使用beforeSend()方法中的setRequestHeader()将标题数据添加到XHR请求中。 问题是, ajaxPrefilter和ajax调用本身都可以包含beforeSend选项,并且其中一个或两个都可以包含异步function。 假设我的ajaxPrefilter看起来像这样: (function($) { $.ajaxPrefilter(function(options, originalOptions, jqXHR) { var auth = $.cookie(“fake_site”), normalizedRequest = $.Deferred(); if (originalOptions.authorizeUser) { options.beforeSend = function() { jqXHR.setRequestHeader(“Authorization”, “Session ” + auth); } // resolving the jqXHR Deferred, statusCode handling, etc. } }); })(jQuery);​ 现在, 选项和originalOptions都可以包含beforeSend()方法,并且我希望options.beforeSend始终先执行。 这似乎是Deferred / promise使用的主要候选者,但是由于beforeSend被自动调用的事实,我不能这样做: options.beforeSend = function(jqXHR) { // setting the request […]

jQuery Deferred – 延迟getJSON成功函数中的变量范围

我将延迟的getJSON调用添加到for循环中的一个数组中,该循环引用其成功函数中的局部变量。 我遇到的问题是,当调用success函数时,局部变量将从循环的最后一次迭代中获取值。 见下面的例子: var calls = []; var arr = [‘a’,’b’,’c’]; for (var a in arr) { calls.push( $.getJSON(window.location, function() { alert(arr[a]); }) ); } $.when.apply($,calls); jsFiddle: http : //jsfiddle.net/Me5rV/ 这导致三个警报值为’c’,而我想要值’a’,’b’和’c’。 这可能吗? 编辑:以下工作,但我不完全确定为什么这有所不同? var calls = []; var arr = [‘a’,’b’,’c’]; for (var a in arr) { calls.push( $.getJSON(window.location, function(x) { alert(x); }(arr[a])) ); } […]

使用deferred with jquery ajax调用和异步进程以及用户确认读取

背景 这是继续我的问题正确的方法来设置一系列同步/异步函数,所有这些都可以停止表单提交和进一步处理? 我得到的答案是正确的方法(延期管道),但我仍然无法实现这一点。 我今天刚开始阅读jquery延迟API,但我还没有掌握。 jQuery API文档似乎过于复杂,只有很少的例子。 任何人都可以链接到一些关于此的基本演示/教程吗? 我需要在这里启动。 细节 我在这个项目中使用了jquery 1.6版。 考虑这个例子 – 当用户点击表单提交按钮时 – 1.运行validateInventory()。 一个。 如果validation失败,如果用户同意,则向用户显示确认对话框(转到步骤2) 要么 湾 如果validation通过(转到步骤2) 2.运行preValidateUrls()。 一个。 如果validation失败,如果用户同意,则向用户显示确认对话框(转到步骤3) 要么 湾 如果validation通过(转到步骤3) 3.提交表格。 以下是我所拥有的异步函数的结构 – 请注意,此函数内部还有一个if(确认)块。 阅读我的问题2 。 function validateInventory() { $.ajax({ type: “POST”, url: posturl+”?”+params, dataType: “json”, success: function(res) { if(!res.success) { //display some confirmation dialog, if user agrees […]

Jquery延迟回拨奇怪

我正在玩jQuery中的回调函数和延迟函数,并且想知道是否有人能告诉我为什么这有效 http://jsfiddle.net/austinbv/QVujr/ get_each_total = function(callback) { var requests; requests = []; var url; url = “http://otter.topsy.com/search.js?callback=?&apikey=38A260E9D12A4908B1AF9184B691131&q=justin+bieber&window=d”; return requests.push($.getJSON(url, function(data) { })); return $.when.apply($, requests).then(function() { callback(); }, function() { return alert(“There was an error communicating with a remote library, try again in a few”); }); }; get_each_total_broken = function(callback) { var requests; requests = []; […]

成功之后ajax重试没有.done

我正在向php文件发出请求。 响应在.done(function(msg){})中处理; 和.fail这很好用。 但有时请求会出错。 我为此重试了一次。 重试也有效。 但是如果第一次失败并且在de 2或3中成功尝试我的request.done不会触发(在firebug中我可以看到它是成功的) 我的请求: var request = $.ajax({ url: “wcf.php”, type: “POST”, dataType: “xml”, async: false, timeout: 5000, tryCount: 0, retryLimit: 3, data: { barcode: value, curPrxID: currentPrxID, timestamp: (new Date).getTime()}, error: function (xhr, ajaxOptions, thrownError) { if (xhr.status == 500) { alert(‘Server error’); } this.tryCount++; if (this.tryCount < this.retryLimit) […]

我怎么能把它写成jQuery deffered函数

我需要获取数据库中的所有表,然后逐个删除它们。 但是每个DROP TABLE都是asnyc。 最重要的是,只有在删除了所有表后才能解析返回的promise。 clear: function() { var dfd = $.Deferred(); var sql = “SELECT name FROM sqlite_master WHERE type=’table’ AND name != ?”, args = [“__WebKitDatabaseInfoTable__”]; var dbTableNamesResult = function(tx, result) { var dropSql = “”; for (var i = 0; i < result.rows.length; i++) { dropSql = "DROP TABLE IF EXISTS " + […]

如果回调可能需要拒绝它,我可以手动解析延迟对象吗?

我正在尝试使用自定义延迟对象来管理一些回调。 我弄清楚了这个简单的案例: var deferred = $.Deferred(); deferred.done(function() { console.log( ‘done’ ); }); var json = $.getJSON(‘/foo’); json.then( function() { deferred.resolveWith(this, arguments); } ); 但我需要在解决/拒绝之前检查响应。 我想添加这样的东西: deferred.pipe( function(response) { if (response.message === ‘error’) { return $.Deferred.reject(response); } return response; } ); 但是当我这样做时,我总是调用我原来的done()回调。 我很确定这是因为一旦我调用deferred.resolveWith() ,“回滚”并将其标记为稍后被拒绝为时已晚。 我知道我可以将条件移动到json.then()的第一个参数,但这似乎忽略了延迟对象的意义 – 我认为它们是用于将所有这些行为封装到一个地方。 是否有可能将条件和回调都deferred同时仍在其他地方解决它?