Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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调用中设置全局变量_Javascript_Jquery_Ajax_Nested - Fatal编程技术网

Javascript 在嵌套ajax调用中设置全局变量

Javascript 在嵌套ajax调用中设置全局变量,javascript,jquery,ajax,nested,Javascript,Jquery,Ajax,Nested,我对嵌套ajax调用有一个特定的要求。我试图在一个ajax调用的success中设置一个全局可访问的变量,并且在另一个ajax调用的success中调用这个ajax调用。最终,parentajax调用的parentsuccess方法利用全局变量执行进一步的操作。问题是全局变量的值始终保持为空。如果我将第二个ajax请求设置为async:false,它就会工作;但是这个解决方案首先破坏了使用ajax的目的 让我分享一个小示例代码来说明我的问题: //global variables var xUR

我对嵌套ajax调用有一个特定的要求。我试图在一个ajax调用的success中设置一个全局可访问的变量,并且在另一个ajax调用的success中调用这个ajax调用。最终,parentajax调用的parentsuccess方法利用全局变量执行进一步的操作。问题是全局变量的值始终保持为空。如果我将第二个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;
       }
    });
 }
jquery1.5开始
实现
Promise
接口,并将它们全部提供给用户
承诺的属性、方法和行为


如果(glblID…
逻辑从第一次
success
回调移动到
success
回调中
FetchID
?欢迎。
$。ajax
是异步的。您可以从
$.ajax
返回结果,然后使用
。然后(函数(结果){//use result here使用结果)
(或
.done(…)
)从您的调用函数中。您可能应该在使用时了解承诺。@Franck Modica我很确定他希望他的
FetchID
函数没有副作用,只检索一个值。@Jeto是的,这让sense@Jeto谢谢你的建议。也许这将是前进的方向,也就是说,学习承诺。不w我正在尝试ponury-kostek的解决方案。感谢您的回答@ponury-kostek;我尝试了您的解决方案,但没有成功。我想是我的错,我没有提供完整的图片。我已经用确切的场景更新了我的帖子。您能帮我吗?
//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"
    });
}