Javascript 如何确定ajax调用是否已完成?

Javascript 如何确定ajax调用是否已完成?,javascript,jquery,ajax,Javascript,Jquery,Ajax,愿和平与祝福降临在你们身上:) 基本上我有两个函数,每个函数执行一个ajax调用。比如: 1: function step1(){ var formdata = new FormData(); formdata = { 'URI': sendtosev }; $.ajax({ type: 'POST', url: 'http://localhost:20012/serv1', data: formdata,

愿和平与祝福降临在你们身上:)

基本上我有两个函数,每个函数执行一个ajax调用。比如:

1:

function step1(){
    var formdata = new FormData();
    formdata = {
    'URI': sendtosev
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          $('.UID).text(result);
       }
    });
}
function step2(){
    var stkname=$('.UID').text();
    var formdata = new FormData();
    formdata = {
    'URI': stkname
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          alert(result);
       }
    });
}
2:

function step1(){
    var formdata = new FormData();
    formdata = {
    'URI': sendtosev
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          $('.UID).text(result);
       }
    });
}
function step2(){
    var stkname=$('.UID').text();
    var formdata = new FormData();
    formdata = {
    'URI': stkname
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          alert(result);
       }
    });
}
仅供参考:执行Step1Ajax是为了从Serv1Servlet获取一些数据。Step2Ajax使用Step1Ajax输出,并通过它从serv2获得一些新数据

现在我正在做的是:

$(function({
   step1();
   step2();
});
通过此
step2
FormData为空,因为
step1
尚未完成调用,并且尚未收到其输出

问题:如何查找
step1()
ajax是否已完成并已收到输出,以便调用
step2()

如果步骤1成功,只需调用步骤2


如果步骤1成功,只需调用步骤2…

您可以使用jquery回调函数。请参考下面的代码

function step1(callback){
    var formdata = new FormData();
    formdata = {
    'URI': sendtosev
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          $('.UID).text(result);
          callback(result);
       }
    });
}

function step2(result){
    var stkname=$('.UID').text();
    var formdata = new FormData();
    formdata = {
    'URI': stkname
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          alert(result);
       }
    });
}

$(function({
   step1(function(result){
        step2();
   });
});

您可以使用jquery回调函数。请参考下面的代码

function step1(callback){
    var formdata = new FormData();
    formdata = {
    'URI': sendtosev
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          $('.UID).text(result);
          callback(result);
       }
    });
}

function step2(result){
    var stkname=$('.UID').text();
    var formdata = new FormData();
    formdata = {
    'URI': stkname
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          alert(result);
       }
    });
}

$(function({
   step1(function(result){
        step2();
   });
});

这是一个很好的回调候选者。例如,步骤1可以重写如下:

function step1(callback){
    var formdata = new FormData();
    formdata = {
    'URI': sendtosev
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          $('.UID').text(result);
          callback();
       }
    });
}
然后,您可以在调用它时编写以下代码:

step1(step2);

这是一个很好的回调候选者。例如,步骤1可以重写如下:

function step1(callback){
    var formdata = new FormData();
    formdata = {
    'URI': sendtosev
    };
    $.ajax({
       type: 'POST', 
       url: 'http://localhost:20012/serv1', 
       data: formdata,
       contentType: "text/html",
       success: function(result){
          $('.UID').text(result);
          callback();
       }
    });
}
然后,您可以在调用它时编写以下代码:

step1(step2);

实现它的两种方法

  • 将'async:false'传递给$.ajax参数。然后,$.ajax将在响应到来之前不会返回

  • 在ajax回调函数中调用step2()


  • 实现它的两种方法

  • 将'async:false'传递给$.ajax参数。然后,$.ajax将在响应到来之前不会返回

  • 在ajax回调函数中调用step2()


  • 用于解释异步调用和如何使用它们的通读本可能重复:用于解释异步调用和如何使用它们的通读本可能重复: