从Jquery$.getJSON方法获取数组的全局数组到REUSE数组


Get global array of arrays from Jquery $.getJSON method to REUSE array

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

将jQuery getJSON中的数据分配给数组

如何使用getJSON从文件中获取JSON数组?

我的问题是,我想使用数据库中的一些数据来创建映射实用程序,但在调用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进行所有特殊的偷工减料操作,使其像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>

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

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

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

您可能需要在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);
  }
});

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

编辑

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