Tag: jquery deferred

重试一个jQuery的Ajax请求的callback附加到其延期

我试图实现一个系统重试ajax请求失败,暂时的原因。 在我的情况下,它是关于重试401状态代码失败的请求,因为会话已经过期,在调用刷新Web服务,恢复会话之后。 问题是,“成功”的callback不会被称为成功的重试,不像被称为“成功”的ajax选项callback。 我已经在下面做了一个简单的例子: $.ajaxSetup({statusCode: { 404: function() { this.url = '/existent_url'; $.ajax(this); } }}); $.ajax({ url: '/inexistent_url', success: function() { alert('success'); } }) .done(function() { alert('done'); }); 有没有办法做成风格的callback调用成功的重试? 我知道推迟不能被“解决”后,被拒绝,是否有可能防止拒绝? 或者,也许复制原来推迟到一个新的延期? 我没有想法:) 下面是一个更现实的例子,我试图排队所有401拒绝的请求,并在成功调用/ refresh后重试它们。 var refreshRequest = null, waitingRequests = null; var expiredTokenHandler = function(xhr, textStatus, errorThrown) { //only the first rejected request will fire […]

jQuery.when了解

我试图使用jQuery.when发射两个ajax请求,然后在两个请求完成后调用某个函数。 这是我的代码: var count = 0; var dfr; var showData = function(data) { dfr.resolve(); alert(count); // Do something with my data data received }; var method1 = function() { dfr = $.Deferred(); return $.ajax('localhost/MyDataService/DataMethod_ReturnsData', { dataType: "jsonp", jsonp: "$callback", success: showData }); }; var method2 = function() { return $.ajax('localhost/MyDataService/DataMethod_ReturnsCount', { dataType: "jsonp", jsonp: "$callback", […]

jquery的promise方法是如何工作的?

我真的不明白delegate和promise是什么。 根据文件 – delegate会将一个select器和事件绑定到某种包装容器上,这个容器可以在以后再次用于当前和将来的项目。 如果新加载的所有内容匹配,那么promise()会将事物重新映射回第一次有界。 也许我不太了解这个承诺的方法。 如果包装仍然存在,但包装容器中的内容已经更改,和/或通过Ajax重新加载? 为什么这些事件不会像第一次受到约束那样触发或工作? 是的,我去过文档页面,我完全不理解他们的解释。

如何使用jquery链接ajax调用

我需要在不locking浏览器的情况下进行一系列的N ajax请求,并且希望使用jQuery的延迟对象来实现这一点。 下面是一个有三个请求的简单例子,但是我的程序可能需要排队超过100个(请注意,这不是确切的用例,实际的代码确实需要在执行下一步之前确保步骤(N-1)的成功步): $(document).ready(function(){ var deferred = $.Deferred(); var countries = ["US", "CA", "MX"]; $.each(countries, function(index, country){ deferred.pipe(getData(country)); }); }); function getData(country){ var data = { "country": country }; console.log("Making request for [" + country + "]"); return $.ajax({ type: "POST", url: "ajax.jsp", data: data, dataType: "JSON", success: function(){ console.log("Successful request for [" + country […]

什么时候应该使用jQuery延迟的“那么”方法,什么时候应该使用“pipe道”方法?

jQuery的Deferred有两个函数可以用来实现函数的asynchronous链接: then() deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred doneCallbacks在parsingDeferred时调用的函数或函数数组。 failCallbacks延迟被拒绝时调用的函数或函数数组。 pipe() deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise doneFilterparsingDeferred时调用的可选函数。 failFilter当Deferred被拒绝时调用的可选函数。 我知道then()已经比pipe()长了一些,所以后者必须增加一些额外的好处,但是这个差别正是我所没有的。 虽然两者的名字不同,但它们的callback参数几乎相同,返回Deferred和返回Promise的差别似乎很小。 我一遍又一遍地读了官方文档,但总是发现它们太“密集”,真的把我的头围绕着,search已经发现了很多关于这个function的讨论,但是我还没有发现任何能够真正澄清不同的东西每个的利弊。 那么什么时候使用更好,什么时候使用pipe更好呢? 加成 菲利克斯的出色答案确实有助于澄清这两个function的不同之处。 但是我想知道是否有时候then()的function优于pipe() 。 很明显pipe()比pipe()更强大,前者似乎可以做任何事情。 使用then()一个原因可能是它的名字反映它的作用是终止处理相同数据的函数链。 但是是否有一个用例需要then()返回原来的Deferred ,由于它返回一个新的Promise而无法用pipe()完成?

jQuery固有的问题$ .Deferred(jQuery 1.x / 2.x)

@Domenic在jQuery延期对象的缺陷方面有一篇非常透彻的文章: 你错过了 Promise的要点。 其中,Domenic突出了jQuery承诺的一些缺点,包括Q ,when.js,RSVP.js和ES6承诺。 我从Domenic的文章中离开,感觉jQuery的承诺在概念上有一个固有的失败。 我正在试图把这个概念的例子。 我收集了jQuery实现的两个问题: 那么这个方法是不可链接的 换一种说法 promise.then(a).then(b) jQuery将在promise满足时调用a then b 。 因为如果在其他承诺库中返回新的承诺,它们的等价物将是: promise.then(a) promise.then(b) 2.exception处理在jQuery中冒泡。 另一个问题似乎是exception处理,即: try { promise.then(a) } catch (e) { } Q中的等价物将是: try { promise.then(a).done() } catch (e) { // .done() re-throws any exceptions from a } 在jQuery中,当catch块失败时抛出exception并且冒泡。 在其他承诺中, a任何exception都将传递给.done或.catch或其他asynchronous捕获。 如果承诺的API调用都没有捕获到它会消失的exception(因此Q是使用.done释放任何未处理的exception的最佳做法)。 上述问题是否涵盖了jQuery实现promise的问题,还是我误解或错过了一些问题? 编辑这个问题涉及到jQuery <3.0; 作为jQuery 3.0 alpha jQuery是Promises […]