因此,根据本教程中关于介质的内容(https://medium.com/coding-design/writing-better-ajax-8ee4a7fb95f#.d7ymg99mp),我尝试使用延迟数组、ajax请求和jQuery.when方法生成多个ajax请求并从每个请求中获取结果。
这是我正在做的事情的代码
function updateAllGoingButtons(){
var dataToPass = {};
var deferreds = [];
$('.btn-group').find('button').each(function(){
console.log($(this).attr('id'));
dataToPass.button = $(this).attr('id');
var ajax = $.ajax({
url: '/update-buttons',
method: 'post',
data: dataToPass,
dataType:'json'
});
deferreds.push(ajax);
$.when.apply($, deferreds).then(function(){
});
});
}
我对如何使用$.when函数以及在哪里可以访问返回到ajax调用的数据感到困惑。
我尝试插入一个简单的成功选项,但它没有进入回调函数。我该怎么做呢?
你只是在太快的时候调用。在启动所有ajax调用并在数组中得到它们的promise后,在
each
循环之外执行此操作:
function updateAllGoingButtons(){
var dataToPass = {};
var deferreds = [];
$('.btn-group').find('button').each(function(){
console.log($(this).attr('id'));
dataToPass.button = $(this).attr('id');
var ajax = $.ajax({
url: '/update-buttons',
method: 'post',
data: dataToPass,
dataType:'json'
});
deferreds.push(ajax);
});
$.when.apply($, deferreds).then(function(){ // <=== Moved this
// <===
}); // <===
}
这些ajax调用的结果将作为一系列离散参数提供给
函数。每个参数将是一个包含三个条目的数组,对应于通常传递给
success
函数的三个参数。因为您处理的是数组,所以您可能希望通过参数
伪数组访问它们。最好有一个拒绝处理程序(第二个参数是then
,或者在jQuery的最新版本中交替使用catch
):
$.when.apply($, deferreds).then(
function() {
var n;
for (n = 0; n < arguments.length; ++n) {
console.log("Result " + n, arguments[n][0]);
}
},
function() {
// At least one request failed
}
);
我有一种情况,我的ajax调用必须以特定的顺序执行。我在其他情况下使用了jQueryDeferred对象,但似乎找不到一种方法来使其正常运行。 我有一个函数,在它的生命周期中执行许多请求。一些请求将在其他请求的成功回调期间执行。 我的问题:当调用时,是否有方法将所有嵌套的延迟对象返回到原始的
问题内容: 我试图在加载器图标和成功的html之间添加一个小的延迟(2秒)。 我尝试使用的是setTimeout并放入延迟号。这是行不通的,所以我希望您能告诉我正确的方法是什么。 我的ajax代码: 现在,它运行得非常快。希望有人能帮忙。 问题答案: 应该用在里面 。
问题内容: 有什么技巧可以基于Redis延迟任务执行(即计划)? 也许一些聪明的方法可以将BLPOP延迟给定的秒数? 问题答案: 您可以使用名称中带有时间成分的多个LIST环。作为时间成分,您可以采用当前秒(0-59)。 您总是将任务添加到当前秒的列表中。要获得作业,请仅在保证内容早于给定秒数的那些列表上执行BLPOP(低超时)。 如果您在多个主机上工作,则必须注意时钟是同步的(NTP)。
问题内容: 我有一些已经在使用的JBoss webapp,还有一个懒惰的初始化问题。因此,建议我在Spring进行调查并使用。 但是,我仍然会收到错误消息,希望您能对我有所帮助?要使用Spring OEM过滤器,我还需要在应用程序中进行哪些更改? 我的设置是这样的: + jsf的东西。 我将其设置如下:web.xml applicationContext.xml: persistence.xml:
我有搜索栏(文本字段)组件,它会根据用户类型更新列表。问题是,对于用户输入的每个字符,列表都会更新,因此如果他们想写入,列表会更改11次!我需要做一些延迟函数(updateList)调用的事情,比如说让它每1秒调用一次,即使它在一秒钟内被调用了很多次。任何建议。
延迟调用一个函数,直到当前调用堆栈已经清除。 使用 setTimeout() ,超时时间为1ms,将新事件添加到浏览器事件队列,并允许渲染引擎完成其工作。使用展开 (...) 运算符为函数提供任意数量的参数。 const defer = (fn, ...args) => setTimeout(fn, 1, ...args); // Example A: defer(console.log, 'a