使两个ajax请求异步运行

时间:2017-06-15 14:38:27

标签: javascript jquery asynchronous

我试图让两个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,这将导致嵌套我不愿意使用的电话。

有没有办法让这段代码异步运行?请告诉我。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您需要做的就是设置在第一个ajax请求成功时调用的函数。

% gets stdin s
",$"23"^#@$\'"\
15
% list $s
\",\$\"23\"^#@\$\\'\"\\

答案 1 :(得分:2)

一个没有承诺的简单方法是在第一个完成后启动第二个调用,并从第一个调用中传递令牌:

$ python code.py > output.txt &