函数看不到JSON对象(javascript,jQuery)

时间:2010-08-20 08:29:16

标签: javascript jquery json

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

此功能看不到“数据”

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

这项工作:

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

您无法在此处使用return。您将data返回匿名闭包函数。

最好的方法是使用callback functiongetJSON执行成功处理程序时应该应用{。}}。

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

<强>使用

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