0

我有以下 Javascript 函数:

function GetUniversity()
{       
    $.getJSON(AddressAccess+"Home/university/format/json",
        function(data) 
        { 
            data = data[0];
            return data;
        }); 
}

现在,当我在函数中测试数据时,数据变量肯定有从 url 返回的数据。现在这是我调用此函数的代码:

$(document).on('pagebeforeshow','#searchpage',
                    function()
                    {
                        var UniveristyDat = null;
                        UniveristyData = GetUniversity();
                        alert(UniveristyData.Name);
                        var out = '';
                        for(i in UniveristyData)
                        {
                            out+= i + ' ' + UniveristyData[i] + "\n";
                        }
                        alert(out);

                    }
              );  

现在从理论上讲,UniveristyData var 应该返回了 contense,但由于某种原因它为 null。不确定这里发生了什么。

4

1 回答 1

1

调用$.getJSON()是异步的。当请求完成时,您传递给它的函数将被执行。但是,其余代码会立即进行评估。因此,您的GetUniversity()函数不会产生任何返回值,您可以使用。

为了解决这个问题,您有 2 个选项:

  1. (更糟)$.ajax改用并async: false在选项中设置。这将保持 JavaScript 的执行,直到请求完成。但是要小心,因为这意味着您的整个页面在此期间都无法使用!
  2. (更好)将所有相关功能传递到$.getJSON. 当请求完成并且您的代码/页面的其余部分在此期间可以正常工作时,它将被执行。

 

function GetUniversity()
{       
    $.getJSON(AddressAccess+"Home/university/format/json",
        function(data) 
        { 
            var UniveristyData = data[0];
            alert(UniveristyData.Name);
            var out = '';
            for(i in UniveristyData) {
              out+= i + ' ' + UniveristyData[i] + "\n";
            }
            alert(out);
        }); 
}

$(document).on('pagebeforeshow','#searchpage', GetUniversity );
于 2013-02-02T13:10:13.317 回答