我试图让两个ajax请求一个接一个地异步运行。第一个请求提取用户代码的值,该值将显示在div中,然后在下一个ajax请求中发送以提取有关用户的某些详细信息。我试过这样的事情:
var uid = "";
var token = "";
$.ajax({
async: true,
type: "POST",
url: "http://www.example.com/apis/login.php",
data: JSON.stringify(inputs),
dataType: "json",
success: function(data) {
if(data.status == "success") {
uid = data.uid;
token = decodeURIComponent(data.token);
}
else{
alert(data.message);
}
},
error: function() {
alert("could not connect to server");
}
});
document.getElementById("user-id").innerHTML = uid;
$.ajax({
async: true,
type: "GET",
url: "http://www.example.com/apis/services.php",
headers: {
"Auth-Token" : encodeURIComponent(token),
"U-Id" : uid
},
success: function(data) {
alert("connected to server");
},
error: function() {
alert("could not connect to server");
}
});
但这不能按预期工作,添加" async:true"或不添加" async"两者都有相同的效果。网络控制台显示在获取第一个请求的响应之前发出了第二个ajax请求,因此第二个请求因标头无效而失败,因此用户ID的文本框更新也是如此。
我可以通过在第一个请求的成功函数中的第一个ajax调用之后添加所有后续代码来使其工作,但是这非常不方便,因为在此之后要调用一些更多的api,这将导致嵌套我不愿意使用的电话。
有没有办法让这段代码异步运行?请告诉我。
提前致谢。
答案 0 :(得分:2)
您需要做的就是设置在第一个ajax请求成功时调用的函数。
% gets stdin s
",$"23"^#@$\'"\
15
% list $s
\",\$\"23\"^#@\$\\'\"\\
答案 1 :(得分:2)
一个没有承诺的简单方法是在第一个完成后启动第二个调用,并从第一个调用中传递令牌:
$ python code.py > output.txt &