0

好的,所以在搜索 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 进行所有特殊的 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>
4

2 回答 2

2

在请求完成之前,全局不会更新。

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

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

于 2013-08-23T19:25:10.333 回答
1

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

$.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 脚本中提取数据的相同情况

于 2013-08-23T20:39:12.503 回答