javascript - 在嵌套的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;
}
});
}
解决方案
在
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"
});
}
推荐阅读
- javascript - 使用 useState 打开数组中的单个元素
- java - 初始化程序块的不可预测的行为
- html - 如何在css中创建彼此相邻浮动的列
- php - 如何在 Firebase 上为 cURL 添加身份验证系统?
- visual-studio - 如何阻止因数据丢失风险而导致 Azure Devops SQL 数据库部署失败
- scala - 如何每两行加载csv几行
- azure-active-directory - Azure AD B2C 自定义策略本地化 REST API 冲突响应
- mbed - Mbed Studio 中的 X_NUCLEO_IHM03A1?
- javascript - 如何仅在加载元素时对其执行操作?
- azure - 如何从构建管道以 AAD 用户身份运行 sql 脚本?