Javascript Ajax请求的顺序执行

Javascript Ajax请求的顺序执行,javascript,jquery,ajax,Javascript,Jquery,Ajax,脚本应该通过ajax获取用户的会话,并将其传输到其他ajax请求,这些请求获取图表的数据。第一个请求成功,但其他请求没有成功,因为它们的sessionId未定义。试图将它们封装在函数中,但不幸的是什么都没有发生。可以做些什么 var sessionId, requestInWorkCount, requestInWorkPower; function getSession(){ $.getJSON("http://192.168.1.142/DashboardService

脚本应该通过ajax获取用户的会话,并将其传输到其他ajax请求,这些请求获取图表的数据。第一个请求成功,但其他请求没有成功,因为它们的sessionId未定义。试图将它们封装在函数中,但不幸的是什么都没有发生。可以做些什么

var sessionId,
    requestInWorkCount,
    requestInWorkPower;

function getSession(){
  $.getJSON("http://192.168.1.142/DashboardService.svc/web/jsonLoginUser?UserID=User1&UserPassword=123", {},
                    function(data) {
                    $.each(data, function (key, val) {
                      sessionId = val.toString();
                      return sessionId;
                    })
                });
};

function getData(session){
      $.getJSON("http://192.168.1.142/DashboardService.svc/web/jsonGetIndicator?SessionID="+session+"&IndNum=1", {},
                function(data) {
                $.each(data, function (key, val) {
                  requestInWorkCount = val;
                  return requestInWorkCount;
                })
            });
      $.getJSON("http://192.168.1.142/DashboardService.svc/web/jsonGetIndicator?SessionID="+session+"&IndNum=2", {},
                function(data) {
                $.each(data, function (key, val) {
                  requestInWorkCount = val;
                  return requestInWorkPower;
                })
              });
    };
$(document).ready(function(){
  getSession();
  getData(sessionId);
  setInterval('show()',1000); 

});

ajax调用是异步的,因此第二个ajax调用在第一个调用完成之前执行,这就是未定义sessionId的原因

使用第一个ajax调用的success函数,并在其中调用
GetData()

此外,您不需要返回
sessionId

function getSession(){
  $.getJSON("http://192.168.1.142/DashboardService.svc/web/jsonLoginUser?UserID=User1&UserPassword=123", {},
                    function(data) {
                    $.each(data, function (key, val) {
                      sessionId = val.toString();
                      getData(sessionId);

                    })
                });
};
你现在这样叫:

    $(document).ready(function(){

      getSession();


    });

AJAX请求是异步的,不能按顺序执行

这里一个简单的解决方案是在AJAX成功块中调用
getData()

function getSession() {
    $.getJSON("http://192.168.1.142/DashboardService.svc/web/jsonLoginUser?UserID=User1&UserPassword=123", {}, function(data) {
        $.each(data, function (key, val) {
            sessionId = val.toString();
            getData(sessionId);
            return sessionId;
        });
    });
};

您必须接受ajax请求的响应。我相信你不会还的。但在代码中,您也许应该这样做

sessionId = getSession();
getData(sessionId);

您忘记取消引用它返回的内容。

$。getJSON返回一个jqXHR对象,而不是调用的响应。