jquery .getJSON() 中的持久化

发布于 2024-11-13 06:48:09 字数 564 浏览 3 评论 0原文

我正在使用 .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] 就会变为空,并且我无法访问有关推送对象的任何内容,我认为这将是一个副本而不是

引用 ?用户进行多次这样的搜索,以便创建一个小部件列表,然后在每个对象的属性之间工作是否有一种可接受的方法可以在函数完成后使该数据持久化?

I'm using .getJSON to send a search query to my PHP server and am returning an array which has been json_encode'd. I'd like to use the resulting object after the jQuery function completes (ideally, pushing it into an array, and use it like any other object elsewhere in the page.

But, the object ceases to exist after the function completes. This is a success:

  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);
  });

However as soon as I leave the function, widgets.push[length] becomes null, and I can't access anything about the push'ed object. I would think this would be a copy and not a reference?

My application involves the user doing several of these searches in order to create a list of widgets, and then working between each object's attributes. Is there an accepted way to make this data persistent after the function completes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

日记撕了你也走了 2024-11-20 06:48:09

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

widgets[widgets.length - 1]

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

I think that you are checking the wrong index of the array.

widgets[widgets.length - 1]

It might be other things... but this might be it.

月光色 2024-11-20 06:48:09

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

您需要确保对小部件的任何操作发生在 getJSON 完成之后。

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

The getJSON call is happening asynchronously or independent of the rest of your JavaScript. Your issue is most likely because your getJSON call is not completed before your are attempting to manipulate your widgets array.

You need to make sure any manipulation of widgets occurs after getJSON has completed.

Part of the getJSON syntax allows you to add a callback function when the call succeeds. See http://api.jquery.com/jQuery.getJSON/. Put your ALL your widget maniuplation code in "success".

小帐篷 2024-11-20 06:48:09

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

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

  1. 全局“数组”变量

    var widgetContents = []; 
    
  2. json 请求....

    $.getJSON(jsonp_url, 函数(结果) { 
        $.each(结果, 函数(i, 值) {                      
        widgetContents[i] = 值;                          
    
        // console.log( i + " => " + value);
        });
            var 成功 = true;                                     
    });
    
  3. 调试或捕获问题...

    if ( widgetContents.length == 0 || success != true ) { 
        alert("哎呀...后台出了点问题...");
    }
    
  4. 处理结果...

    <前><代码>其他{
    $.each(widgetContents, 函数(索引, 值) {
    $('#' + contentID).append(value);

    /* 或任何你需要做的事情.... */
    });
    }

Building a 'little' widget and needed to load the jsonP results (widget content ) into the widget container....

This works for me.... ah-one, ah-two, ah-three and four....

  1. the global "array" variable

    var widgetContents = []; 
    
  2. the json request....

    $.getJSON(jsonp_url, function(results) { 
        $.each(results,  function(i, value) {                      
        widgetContents[i] = value;                          
    
        // console.log( i + " => " + value);
        });
            var success = true;                                     
    });
    
  3. debug or catch problems...

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

    else {
           $.each(widgetContents, function(index, value) {                         
                $('#' + contentsID).append(value);
    
                /* or whatever you need to do....   */                      
           });
    }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文