2010-08-20 22 views
1
function json (url){ 
     $.getJSON(url, function(data) { 
      return data; 
     }) 
    } 

此功能不看 “数据”功能没有看到JSON对象(Java脚本和jQuery)

function MakeAlert(){ 
     data = json('action.php'); 
     window.alert(data.name); 
} 

这项工作:

function json (url){ 
      $.getJSON(url, function(data) { 
       window.alert(data.name); 
      }) 
    } 

回答

2

这是因为$.getJSON是异步的。它发送请求并立即返回。一旦服务器响应(可能是几秒钟后),它会调用success回调,这就是为什么data只能在此回调中访问的原因。

如果你想阻止你可以发送一个同步请求调用者(注意,这可能会冻结UI,同时请求执行这违背了AJAX的全部目的):

function json(url) { 
    var result = null; 
    $.ajax({ 
     url: url, 
     async: false, 
     dataType: 'json', 
     success: function(data) { 
      result = data; 
     } 
    }); 
    return result; 
} 
+0

谢谢。现在变得清晰 – user426134 2010-08-20 08:49:06

1
function json (url){ 
    $.getJSON(url, function(data) { 
     return data; 
    }) 
} 

你在这里不能使用return。您将返回data的匿名关闭功能。

你最好的办法是使用callback function,当执行getJSON成功处理程序时应该应用callback function

function json (url, cb){ 
    $.getJSON(url, function(data) { 
     cb.apply(null, [data]); 
    }) 
} 

使用

json('action.php', function(data){ 
    alert(data); 
});