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