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

时间:2013-08-23 18:53:26

标签: php javascript jquery html

好的,所以在搜索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脚本返回数据。 (使用所有特殊的jerry绑定,您必须对IIS进行操作,使其像PHP一样)

  4. 我可以使用

    调用php脚本并使用JQuery库2.0.3.js显示它的数据
    $.getJSON('SqlTalk.php')
    
  5. 我可以使用这个填充HTML中的元素,但是我无法获得一个数组数组以便与其他对象一起使用,这正是我真正想要的。最后,我想制作一个完整的javascript,它只是从PHP脚本中获取一个数组数组,然后引用嵌入的javascript或作为用于映射的参考。然而,看起来$ .getJSON从我的阅读中看起来是不合理的,但即使是我看到的方法也不适合我试图“推”到现有的数组。可能是我在混合Jquery和传统的javascript时误解了语法。

  6. 完成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>
    

2 个答案:

答案 0 :(得分: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);
    });

没有解决方法,这就是异步请求的工作方式。时钟保持滴答声,代码在收到请求时继续执行。

答案 1 :(得分:1)

您可能希望在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数据)

修改

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