jquery中的持久性.getJSON()

时间:2011-06-03 01:55:01

标签: jquery json persistence getjson

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

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

  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 [length]就变为null,我无法访问有关push'ed对象的任何内容。我认为这将是一个副本,而不是一个参考?

我的应用程序涉及用户执行其中一些搜索以创建窗口小部件列表,然后在每个对象的属性之间工作。在函数完成后是否有可接受的方法使这些数据持久化?

3 个答案:

答案 0 :(得分:1)

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

widgets[widgets.length - 1]

可能是其他事情......但这可能是它。

答案 1 :(得分:0)

getJSON调用是异步发生的,或者与JavaScript的其余部分无关。您的问题很可能是因为在您尝试操作窗口小部件数组之前未完成getJSON调用。

您需要确保在getJSON完成后对小部件进行任何操作。

getJSON语法的一部分允许您在调用成功时添加回调函数。见http://api.jquery.com/jQuery.getJSON/。将您的所有小部件maniuplation代码放入“成功”。

答案 2 :(得分:0)

构建一个'小'小部件,需要将jsonP结果(小部件内容)加载到小部件容器中....

这对我有用......啊 - 啊,啊 - 二,啊 - 三和四......

  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....   */                      
           });
    }