2011-06-03 38 views
0

我正在使用.getJSON向我的PHP服务器发送搜索查询,并返回一个已被json_encode'd数组。我希望在jQuery函数完成后使用生成的对象(理想情况下,将其推入数组中,并像使用页面中其他任何对象一样使用它)。jQuery中的持久化.getJSON()

但是,函数完成后对象不再存在这是成功的:

var widgets = new Array(); 

    $.getJSON('/server.php', {query: search.value}, function(response) { 
    widgets.push(response); 
    alert('value of result's attribute1 is ' + widgets[widgets.length].attribute1); 
    }); 

但是当我离开的功能,widgets.push [长度]变为零,我无法访问有关push'ed对象什么,我觉得这个会。是一个副本,而不是一个参考?

我的应用程序涉及用户做几个这些搜索,以创建一个小部件列表, n在每个对象的属性之间工作。在函数完成后是否有一种可接受的方式来使此数据持久化?

+0

什么是'widgets'的范围是什么?是否(以及你在另一个函数中调用'getJSON'?试着在'widgets = new Array()'前面放上'var';这将确保你正在创建一个全局变量(只要'widgets' isn在外部范围内声明 – josh3736 2011-06-03 01:59:54

+0

对不起,应该已经解释 - widgets是全局的,第一个声明在

1

我认为你正在检查数组的错误索引。

widgets[widgets.length - 1] 

它可能是其他的东西......但这可能是它。

+0

这是对的 - 索引也是错误的。在我的转录错误。 – Ryan 2011-06-03 02:21:36

0

建立一个“小”小部件,到JSONP结果(Widget内容)加载到小工具容器所需....

这对我的作品....啊一啊二,啊三防和四个....

  1. 全局 “阵列” 可变

    var widgetContents = []; 
    
  2. 的JSON请求....

    $.getJSON(jsonp_url, function(results) { 
        $.each(results, function(i, value) {      
        widgetContents[i] = value;       
    
        // console.log(i + " => " + value); 
        }); 
         var success = true;          
    }); 
    
  3. 调试或发现问题...

    if (widgetContents.length == 0 || success != true) { 
        alert("Opps... something went wrong in the backroom...."); 
    } 
    
  4. 处理结果....

    else { 
         $.each(widgetContents, function(index, value) {       
          $('#' + contentsID).append(value); 
    
          /* or whatever you need to do.... */      
         }); 
    }