脚本应该通过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);
});
答案 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);
你忘了取消引用它返回的内容。