1

出于某种原因,我的函数返回未定义,而似乎本身就在工作。

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

我的第一个警报显示了一个填充列表,但第二个未定义。这有道理吗?

4

2 回答 2

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());
于 2013-05-30T14:32:43.127 回答
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(). 它很干净,您可以控制阻塞状态。

于 2013-05-30T14:37:39.863 回答