出于某种原因,我的函数返回undefined,而看似自己工作。
function getDomains() {
$.ajax({
url: '/rewrites/cgi-bin/ajax.pl?action=listdomains',
dataType:'json',
async: false,
success: function( data ) {
if (data.error) {
alert(data.error);
}
else {
alert(data.domains);
return(data.domains);
}
}
});
}
alert(getDomains());
我的第一个警报显示已填充的列表,但第二个警报未定义。这有什么意义吗?
答案 0 :(得分:2)
您正处于成功通话的功能中。这就是为什么你没有从getDomains函数中获得结果的原因。将其分配给变量并在ajax调用后返回变量。
function getDomains() {
var results;
$.ajax({
url: '/rewrites/cgi-bin/ajax.pl?action=listdomains',
dataType:'json',
async: false,
success: function( data ) {
if (data.error) {
alert(data.error);
}
else {
alert(data.domains);
results = data.domains;
}
}
});
return results;
}
alert(getDomains());
答案 1 :(得分:1)
为什么不这样做,假设您需要返回一个名为whateverFunc()
的函数:
function getDomains() {
$.ajax({
url: '/rewrites/cgi-bin/ajax.pl?action=listdomains',
dataType:'json',
async: false,
success: function( data ) {
if (data.error) {
alert(data.error);
}
else {
whateverFunc(data.domains);
}
}
});
}
function whateverFunc(domains){
alert(domains);
}
你无法从success
回调中返回任何内容,这没有任何意义。
我还想在这里抱怨async:false
。为什么你绝对需要它?
您应该让调用是异步的,并使用一些互斥锁或其他东西自己管理阻塞状态。实际上,在whateverFunc()
中得到答案后,您应该触发弹出窗口或任何您需要做的事情。
它很干净,你可以控制阻塞状态。