Javascript 在嵌套ajax调用中设置全局变量
我对嵌套ajax调用有一个特定的要求。我试图在一个ajax调用的success中设置一个全局可访问的变量,并且在另一个ajax调用的success中调用这个ajax调用。最终,parentajax调用的parentsuccess方法利用全局变量执行进一步的操作。问题是全局变量的值始终保持为空。如果我将第二个ajax请求设置为async:false,它就会工作;但是这个解决方案首先破坏了使用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
//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"
});
}