Установка глобальной переменной внутри вложенных вызовов ajax - PullRequest
0 голосов
/ 11 октября 2018

У меня есть особое требование для вложенных вызовов 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;
       }
    });
 }

1 Ответ

0 голосов
/ 11 октября 2018

Начиная с 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"
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...