Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用ajax函数,然后等待,然后再次调用另一个ajax函数_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 调用ajax函数,然后等待,然后再次调用另一个ajax函数

Javascript 调用ajax函数,然后等待,然后再次调用另一个ajax函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,到目前为止,我做到了: $.when(Results.ServiceController.Ajax1(clickedNumber)) .then(Results.UtilFunctions.Wait(5000)) .then(Results.ServiceController.Ajax2(clickedNumber)); 我的Ajax1函数返回ajax对象。我的等待函数如下所示: function (time) { var ret = new $.Deferred(); set

到目前为止,我做到了:

$.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”返回承诺“延迟对象,跟踪已传递的所有延迟的聚合状态。当所有延迟被解决时,该方法将立即解决其主延迟,或者当其中一个延迟被拒绝时,该方法将立即拒绝该主延迟。如果已解析主延迟,则会将传递给jQuery.when的所有延迟的解析值传递给它。例如,当延迟是jQuery.ajax()请求时,参数将是请求的jqXHR对象,按照它们在参数列表中给出的顺序。”

setTimeout(…)
始终立即返回,并且作为第一个参数传递的函数在超时过期后执行

你应该这样做:

function (f, arg, time) {
    setTimeout(function () {
        f(arg);
    }, time);
}

$.when(Results.ServiceController.Ajax1(clickedNumber))
.then(Results.UtilFunctions.Wait(
    Results.ServiceController.Ajax2, clickedNumber, 5000
));

相反。

默认情况下,Ajax函数是异步的

解决方案1是:生成同步函数。与jQuery类似:

$.ajax(
      url: ".../foo",
      async: false
)
$.ajax(
      url: ".../bar",
      async: false
)
$.ajax(
      url: "...",
      success: function (data) {
        anotherAjaxFunction()
      }
)
解决方案2是:在第一个函数调用的成功回调中执行第二个ajax函数调用。与jQuery类似:

$.ajax(
      url: ".../foo",
      async: false
)
$.ajax(
      url: ".../bar",
      async: false
)
$.ajax(
      url: "...",
      success: function (data) {
        anotherAjaxFunction()
      }
)

不知道为什么它对你不起作用

函数等待(时间){
var ret=new$.Deferred();
setTimeout(函数(){
ret.resolve(“在“+时间内解决”);
},时间);
返回ret;
}
函数ajaxCallOnWait(){
$.each(参数、函数(索引、res){
$('ul')。追加('
  • '+res+'
  • '); }); } var promise=$.when(wait(1000)、wait(5000)、wait(2000)); 承诺。然后(ajaxCallOnWait);

    它总共等待了8秒,
    $。当
    返回一个延迟时,我只需在这个延迟上执行一个then,然后调用另一个函数。这可以是ajax调用,也可以是一个简单的追加,就像我的示例中一样。

    您想过让ajax请求同步吗?尝试为您的ajax调用创建
    async=false
    。为什么?来自jQuery文档看起来我不必这么做。我只在第二个函数-等待函数返回承诺后才返回ajax(即我从第一个函数返回承诺-Ajax1函数),第三个函数Ajax2应该执行。我想让我的等待函数更“通用”“。无论如何,我现在将尝试这样做。我希望将组织函数顺序的代码放在单独的函数中。那时我正在尝试使用jQuery。它应该能工作,但不能。