【问题标题】:Get global array of arrays from Jquery $.getJSON method to REUSE array从 Jquery $.getJSON 方法获取数组的全局数组到 REUSE 数组
【发布时间】:2013-08-23 18:53:25
【问题描述】:

好的,所以在搜索 Stack Overflow 的答案后,我找到了两个线程并尝试了它们,但它们对我不起作用。

Assign data from jQuery getJSON to array

How to get JSON array from file with getJSON?

我的问题是我想使用数据库中的一些数据作为映射实用程序,但是在调用 Jquery 方法 $.getJSON() 后 JSON 的一些元素消失了。我可以将它们创建为 'ul' 元素就好了。我无法用我尝试过的任何方法让他们推送到数组数组。我在这里问是因为我很好奇我做错了什么。我曾认为我可能必须遍历 DOM 才能获取元素一次填充,但这对我来说似乎很愚蠢,我想知道是否有更简单的方法。我是 javascript 和 Jquery 的新手,但了解编程概念。

我使用的概念是这样的:

  1. 我有一个带有值的 SQL Server 2008 数据库:

    PlaceID PlaceName
    1       Place 1
    2       Place 2
    3       Place 3
    4       Place 4
    
  2. 我可以使用“sqlsrv”驱动程序创建一个 PHP 脚本来获取值并输出一个

    echo json_encode($data);
    
  3. 我可以确认我可以从本地 IIS 中的这个 PHP 脚本返回数据。 (您必须对 IIS 进行所有特殊的 jerry 操纵,使其像 PHP)

  4. 我可以调用 php 脚本并使用 JQuery 库 2.0.3.js 显示它的数据

    $.getJSON('SqlTalk.php')
    
  5. 我可以用它来填充 HTML 中的元素,但我无法获得一个数组数组以供其他对象重用,这是我真正想要的。最终,我想制作一个完整的 javascript,它只从 PHP 脚本中获取一组数组,然后引用该 javascript 嵌入或作为用于映射的引用。但是,从我的阅读来看,$.getJSON 似乎是异步的,但即使是我看到的方法也不适用于我尝试“推送”到现有数组。可能是我在混合 Jquery 和传统 javascript 时也误解了语法。

瓶颈所在的完整 HTML 代码。基本上 PHP 将返回数据,如第 1 步所示,但作为 JSON 对象除外。这是一个简单的例子,让我首先超越概念证明。我可以显式推送到数组,并且可以很好地生成 ul 元素的子项。无论我尝试从我读过的内容中重新格式化 getJSON 方法,我都无法从“getJSON”推送项目。

<html>
<head>
        <script type='text/javascript' src='JQuery 2.0.3.js'></script>
</head>
<body>
    <ul></ul>
    <script>
        test = [
                {
                  PlaceID: "1",
                  PlaceName: "Somewhere"
                }
               ]

        test.push({PlaceID: "2", PlaceName: "SomewhereElse"});

        function getArray() {
            return $.getJSON('SqlTalk.php')
        }

        getArray().done(function(json){
           $.each(json, function(key, val){
              //test[key] = { PlaceID: val.PlaceID};  // doesn't work
              test.push({PlaceID: val.PlaceID, PlaceName: val.PlaceName});  // also does not work, can't push.
              $('ul').append('<li id="' + key + '">' + val.PlaceName + '</li>');
           });
        });

        alert(test.length);
        // So I get my output to the 'ul' element fine, but my test array never gets the values.
        //I have tried what others have stated and it does not work.
   </script>

</body>
</html>

【问题讨论】:

  • 对不起,你不能这样做。在 getArray 中的 ajax 请求完成之前很久,您就已经很警觉了。相反,存储全局返回的 jqXHR 对象,并在需要再次获取它的数据时对其应用另一个 done。
  • 好的,但本质上我只想要类似于 var items = []; 的东西$.getJSON('SQLTalk.php', function(data){ $.each(data, function(key, place){test.push({PlaceID: place.PlaceID, PlaceName: val.PlaceName }); });我确实想要一个全局返回,我不知道该怎么做或以操作顺序正确的方式来做。
  • 你可以随心所欲地更新全局,但是在请求完成之前你将无法使用它。

标签: php javascript jquery html


【解决方案1】:

只有在请求完成后才会更新全局。

    var getArrayPromise = getArray().done(function(json){
       $.each(json, function(key, val){
          //test[key] = { PlaceID: val.PlaceID};  // doesn't work
          test.push({PlaceID: val.PlaceID, PlaceName: val.PlaceName});  // also does not work, can't push.
          $('ul').append('<li id="' + key + '">' + val.PlaceName + '</li>');
       });
    });

    getArrayPromise.done(function(){
        alert(test.length);
    });

没有解决方法,这就是异步请求的工作方式。在接收请求的同时,时钟一直在滴答作响,代码一直在执行。

【讨论】:

  • 哦....有趣。那么你的意思是我一直在得到它,只是由于操作顺序是异步的,所以操作顺序没有显示出来?而且我对 JQuery 的熟练程度不高,我只需要一种方法来确保 getArray 完成。我的最后一个问题是:“我可以把你所做的总结一下,将数组返回到一个单独的 javascript 文件中,以通过 'test' 名称引用吗?”您将不得不原谅我,因为我在 Jquery 和 Javascript 方面还是个新手,并且正在学习这个项目。
  • 更少的操作顺序,更多的时间。将 ajax 请求视为 setTimeout。 setTimeout 的“完整”部分中的代码在设置延迟之后才会发生。 ajax 请求也是如此。是的,您可以在另一个 js 文件中访问 test,但同样的规则适用;你必须等到它被填充。
【解决方案2】:

您可能希望在 AJAX 响应中使用 complete 回调

$.ajax({
  url: 'SqlTalk.php',
  dataType: 'json',
  success: function(data){        
    for (var i = 0; i < data.length; i++) {
        test.push({PlaceID: data[i].PlaceID, PlaceName: data[i].PlaceName});
        $('ul').append('<li id="' + i + '">' + data[i].PlaceName + '</li>'); 
    }
  },
  complete: function(){
    console.log(test);
  }
});

我做了一个快速的 jsfiddle (http://jsfiddle.net/Ar7kX/) 来展示完整的回调函数(使用另一种数据和方式,因为我显然无法访问你的真实数据:)),一个更合适的数分钟后要跟踪的数组数组(如果我知道如何从 jsfiddle 收集四方数据)

编辑

在这里,您可以看到直接从foursquare http://jsfiddle.net/f38F3/1/(30 个项目)中提取的数组数组,希望这反映了您从php 脚本中提取数据的情况

【讨论】:

  • 感谢工作以及感谢。我现在要解决的问题是我需要填充一个 javascript 文件,或者想要。这会动态地获得更复杂的值树结构。我需要知道如何从基本 html 文件完成此操作。
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多