首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Jquery $.getJSON方法获取数组的全局数组以重用数组

从Jquery $.getJSON方法获取数组的全局数组以重用数组
EN

Stack Overflow用户
提问于 2013-08-23 18:53:25
回答 2查看 749关注 0票数 0

好的,在搜索堆栈溢出以寻找答案之后,我找到了两个线程,并同时尝试了这两个线程,但是它们对我没有作用。

Assign data from jQuery getJSON to array

How to get JSON array from file with getJSON?

我的问题是,我想为映射实用程序处理数据库中的一些数据,但是在调用Jquery方法$.getJSON()之后,JSON的一些元素就会出现。我可以把它们创建成一个“ul”元素。我无法让他们用我尝试过的任何方法将数组推入数组中。我在这里问,因为我好奇我做错了什么。我曾经想过,我可能需要遍历DOM才能使元素一旦被填充,也许,这对我来说是很愚蠢的,我想知道是否有一种更简单的方法。我是javascript和Jquery的新手,但我了解编程概念。

我使用的概念如下:

  1. 我有一个具有值的Server 2008数据库: PlaceID PlaceName 1位1 2位2 3位3 4位4位
  2. 我可以用'sqlsrv‘驱动程序创建一个PHP脚本,以获得值并输出一个 回声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方法。

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-23 19:25:10

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

代码语言:javascript
复制
    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);
    });

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

票数 2
EN

Stack Overflow用户

发布于 2013-08-23 20:39:12

您可能希望对AJAX响应使用complete回调。

代码语言:javascript
复制
$.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收集四方数据)

编辑

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18409904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档