到目前为止,我做到了:
$.when(Results.ServiceController.Ajax1(clickedNumber))
.then(Results.UtilFunctions.Wait(5000))
.then(Results.ServiceController.Ajax2(clickedNumber));
我的Ajax1函数返回ajax对象。我的等待函数看起来像这样:
function (time) {
var ret = new $.Deferred();
setTimeout(function () {
ret.resolve();
}, time);
return ret;
}
问题是第二个ajax请求函数(Ajax2)并没有等待等待函数!编辑:我也试过:
$.when(Results.ServiceController.Ajax1(clickedNumber),Results.UtilFunctions.Wait(5000))
.then(Results.ServiceController.Ajax2(clickedNumber));
什么也没变。从jQuery文档:
在将多个延迟对象传递给jQuery.when的情况下,该方法将从新的“master”返回promise“延迟对象,跟踪已传递的所有延迟的聚合状态。当所有延迟被解决时,该方法将立即解决其主延迟,或者当其中一个延迟被拒绝时,该方法将立即拒绝该主延迟。如果已解析主延迟,则会将传递给jQuery.when的所有延迟的解析值传递给它。例如,当延迟是jQuery.ajax()请求时,参数将是请求的jqXHR对象,其顺序与参数列表中给出的顺序相同。”
不知道为什么它不适合你。请看这把小提琴进行简单的演示。
function wait(time) {
var ret = new $.Deferred();
setTimeout(function() {
ret.resolve('resolved in ' + time);
},time);
return ret;
}
function ajaxCallOnWait() {
$.each(arguments, function(index, res) {
$('ul').append('<li>' + res + '</li>');
});
}
var promise = $.when(wait(1000), wait(5000), wait(2000));
promise.then(ajaxCallOnWait);
它总共等待8秒,$.时
返回一个延迟,在这个延迟上,我只是做一个然后调用另一个函数。这可以是一个ajax调用或一个简单的追加,就像我的示例一样。
默认情况下,Ajax函数是异步的。
解决方案1是:生成同步函数。与jQuery类似:
$.ajax(
url: ".../foo",
async: false
)
$.ajax(
url: ".../bar",
async: false
)
解决方案2是:从第一个函数调用开始,在成功回调中执行第二个ajax-Function-call。就像jQuery:
$.ajax(
url: "...",
success: function (data) {
anotherAjaxFunction()
}
)
setTimeout(...)
总是立即返回,并且作为第一个参数传递的函数在超时期满后执行。
你应该这样做:
function (f, arg, time) {
setTimeout(function () {
f(arg);
}, time);
}
$.when(Results.ServiceController.Ajax1(clickedNumber))
.then(Results.UtilFunctions.Wait(
Results.ServiceController.Ajax2, clickedNumber, 5000
));
相反
我使用的是react native而不是expo,当尝试使用UseState设置值时,它不会立即设置,并且我无法获取值在另一个功能中。 如何让它等待设置,然后调用函数pressed()
问题内容: 我有多个ajax查询同时运行,我希望它们等待最后一个返回,然后在所有ajax调用上运行成功处理程序。作为简化示例,请考虑: 假设所有请求都同时发送。由于它们是异步的,因此它们将在不同的时间返回。假设一个请求返回需要100毫秒,而另一个请求则需要3000毫秒。我显然不知道哪个会最先返回。他们都以某种方式更新了DOM,我希望一次将这些更改一次全部显示给查看器。我该怎么做呢? 我能想到的最好
问题内容: 我已经审查了很多有关此类问题的答案,但现在我对最佳方法感到困惑。鉴于最新的jquery,我想 调用一个ajax函数 做ajax处理(成功或错误)//正常工作 成功或错误时,将状态返回到调用函数以进行进一步处理 在调用函数(doAjax)中,如何等待回调,然后完成对成功或错误的处理(在这种情况下,成功时清除表格,错误时保持原样) 感谢任何建议, Art [EDIT] 你们发现有一个错字,
问题内容: 我的document.ready()中有一些ajax调用 喜欢 : 我如何强制它等待,直到我们从ajax请求获得所有回叫之前不继续? 问题答案: 我根本不喜欢任何答案,最好的方法(自Jquery 1.5+起)是使用Deferred对象,这些是操纵异步调用的对象,可以解决: 这样,myFunc会在执行2个ajax调用之后执行,如果其中一个出错,则执行myFailure。 您可以在jque
问题内容: 基本上,一旦用户在我的应用程序中离开了网页,我就需要使用AJAX调用PHP脚本,这会将在网页上花费的时间插入数据库中,然后离开该页面。 重要的是要等待AJAX请求完成,因为用户无法访问我的应用程序中的网页,除非用户在前一页上花费了一定的时间(例如两分钟)。 这是我的jQuery代码: 我应该如何更改它,以便它将在离开网页之前等待AJAX请求结束? 编辑: 或者,最好每隔一分钟左
问题内容: 我有2个差异函数中的2个ajax调用。我想使用.click调用这两个函数。func1将数据插入到数据库中,然后func2将检索数据,所以我的问题是如何等到func1完全完成后才执行func2。 我尝试了.delay(),它可以工作,但是我认为这是一个愚蠢的解决方案。 问题答案: 三种方式: 成功调用func1时调用func2: 时髦完成后,使用API调用func2: 使func1同步(