【问题标题】:Persistence within jquery .getJSON()jquery .getJSON() 中的持久性
【发布时间】:2013-07-21 01:01:49
【问题描述】:

我正在使用 .getJSON 向我的 PHP 服务器发送搜索查询,并返回一个经过 json_encode 编码的数组。我想在 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,并且我无法访问有关推送对象的任何内容。我认为这将是副本而不是参考?

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

【问题讨论】:

  • widgets的范围是什么?是吗(以及您在另一个函数中对getJSON 的调用?尝试将var 放在widgets = new Array() 前面;这将确保您正在创建一个全局变量(只要widgets 未在外部范围)。
  • 对不起,应该解释一下 - 小部件是全局的,
  • 好的,那么你以后从哪里尝试访问widgets
  • 访问发生在创建第二个小部件之后......随着更多小部件被推送到阵列上,依此类推。如果将 widgets.push 放在 .getJSON 的成功回调中,你同意吗?

标签: jquery json persistence getjson


【解决方案1】:

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

widgets[widgets.length - 1]

可能是其他事情......但可能就是这样。

【讨论】:

  • 这是正确的 - 索引也是错误的。我的转录错误。
【解决方案2】:

getJSON 调用异步发生或独立于 JavaScript 的其余部分。您的问题很可能是因为在您尝试操作小部件数组之前您的 getJSON 调用未完成。

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

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

【讨论】:

  • 谢谢,这就是我要找的东西 - 一切都在“成功”回调中。
【解决方案3】:

构建一个“小”小部件并需要将 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....   */                      
           });
    }
    

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 2013-07-17
    • 2016-11-04
    • 2019-01-08
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多