首页 > 解决方案 > 在嵌套的ajax调用中设置全局变量

问题描述

我对嵌套的 ajax 调用有特定的要求。我正在尝试在一个 ajax 调用的成功中设置一个全局可访问的变量,并且这个 ajax 调用正在另一个 ajax 调用的成功中被调用。最终,父ajax调用的父成功方法利用全局变量来执行进一步的操作。问题是全局变量的值始终保持空白。如果我将第二个 ajax 请求设置为 async:false; 它会起作用。但是这个解决方案首先违背了使用 ajax 的目的。

让我分享一个小示例代码来说明我的问题:

//global variables
var xURL = "https://sampleurl.com";
var glblID = "";

//first ajax call    
$.ajax({    
   url: url1,    
   data: data1,
   type: "POST",
   contentType: "application/json",
   success: function (msg) {
      //some js code here

      //second ajax call
      FetchID();

      //more js code here

      if(glblID != "")
      {
          window.location.href = xURL + "?id=" + glblID 
      }
      else
      {
          window.location.href = xURL;
      }
   }
});

function FetchID()
{
    $.ajax({
       url: url2,
       data: data2,
       type: "POST",
       contentType: "application/json",
       success: function (data) {
           glblID = data.d;
       }
    });
 }

标签: javascriptjqueryajaxnested

解决方案


jQuery 1.5实现Promise接口时,为它们提供所有属性、方法和行为Promise

//first ajax call    
$.ajax({
    url: url1,
    data: data1,
    type: "POST",
    contentType: "application/json"
}).then(function (msg) {
    //second ajax call
    FetchID().then((data) => {
        var glblID = data.d;
        if (glblID != "") {
            //do something with glblID
        } else {
            //do something else
        }
    });
});

function FetchID() {
    return $.ajax({
        url: url2,
        data: data2,
        type: "POST",
        contentType: "application/json"
    });
}

推荐阅读