使用Javascript中的alert()处理一个奇怪的问题

Ant*_*nto 1 javascript

我在JavaScript中有以下方法:

function getData(){
    var result;

    $.getJSON("app/data/ptl", function (data) {
        if (data == null) {
            return false;
        }

        var x_data = new Array();
        var y_data = new Array();

        $.each(data, function(index, value) {
            x_data.push(index);
            y_data.push(value);
        });

        result = [months_data,value_data];

    });

    alert('');
    return result;
}
Run Code Online (Sandbox Code Playgroud)

调用此方法时,将检索确切的数据.但是当我删除alert('')数据时没有收到.有谁知道这个问题的合理解释?

Den*_*ret 6

那是因为你的函数是异步的,并且删除alert使得return r在远程服务器应答之前执行该行.

您不能简单地从调用异步工作的函数同步返回.通常的解决方案是提供回调并在回调中执行您想要执行的操作:

function fetchData(doWithData){
  $.getJSON("app/data/ptl", function (data) {
    if (data == null) {
        return;
    }
    var x_data = new Array();
    var y_data = new Array();
    $.each(data, function(index, value) {
        x_data.push(index);
        y_data.push(value);
    });
    r = [months_data,value_data];
    doWithData(r);
   });
}


fetchData(function(result) {
   // use result here
});
Run Code Online (Sandbox Code Playgroud)