我正在使用调用另一个javascript函数(zConvertEmplidtoRowid)的javascript函数,该函数使用运行查询的ajax调用来返回变量(rowid)中的数据。我的问题是我不知道如何将数据返回到原始函数。
这是调用ajax函数的原始函数的片段(zConvertEmplidtoRowid)
var rowid = zConvertEmplidtoRowid(emplid);
//the alert should show what the query via ajax returned
alert(rowid);
zEmployeePortrait(emplid, ajaxlink);
}
这是ajax函数......我想在这里的某个地方我需要放回,但我之前从未使用过ajax,所以我不确定。
function zConvertEmplidtoRowid(emplid, ajaxlink, callback) {
if (typeof XMLHttpRequest == 'undefined') {
XMLHttpRequest = function() {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
throw new Error('This browser does not support XMLHttpRequest or XMLHTTP.');
};
}
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
var rowid = request.responseText;
callback(rowid);
}
}
var ajax_link = ajax_link + "?emplid=" + emplid;
request.open('GET', ajax_link);
request.send();
}
答案 0 :(得分:2)
正如@epascarello指出的那样,ajax调用是异步的,你编写的代码期望调用以同步的方式返回。
您有两种选择:
1)使ajax调用同步(我强烈建议不要采用这种方式)。
2)将回调函数作为参数传递给进行ajax调用的函数,然后在调用返回后调用回调函数。
e.g:
function zConvertEmplidtoRowid(emplid, ajaxlink, callback) { //Added a callback function parameter
if (typeof XMLHttpRequest == 'undefined') {
XMLHttpRequest = function() {
try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
throw new Error('This browser does not support XMLHttpRequest or XMLHTTP.');
};
}
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
var rowid = request.responseText;
//now you invoke the callback passing the rowid as argument
callback(rowid);
}
}
var ajax_link = ajax_link + "?emplid=" + emplid;
request.open('GET', ajax_link);
request.send();
}
zConvertEmplidtoRowid(emplid, ajaxlink, function(rowId) {
alert(rowId);
zEmployeePortrait(emplid, ajaxlink);
});
答案 1 :(得分:0)
正如epascarello在他的评论中暗示的那样,你需要同步进行javascript调用以获得返回值......
我倾向于使用jquery来协助通话,但快速谷歌建议你可以通过改变来实现:
request.open(' GET',ajax_link);
为:
request.open(' GET',ajax_link,false);
然后可以通过以下方式访问响应:
request.responseText