顺序执行Ajax请求

时间:2014-05-07 07:26:25

标签: javascript jquery ajax

脚本应该通过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); 

});

3 个答案:

答案 0 :(得分:3)

ajax调用是 async 所以你的第二个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();


    });

答案 1 :(得分:0)

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;
        });
    });
};

答案 2 :(得分:-1)

你必须接受ajax请求的RESPONSE。我相信你没有归还它。但是在您的代码中,您应该这样做

sessionId = getSession();
getData(sessionId);

你忘了取消引用它返回的内容。