1

我试图能够动态地重新加载我将用于自动完成字段的变量,但是我在加载初始调用时遇到了问题。目前,我的 javascript 由以下组成:

<script type="text/javascript">
  var myList;

  function setTextSuggest() {
    $("#loginInput").autocomplete({
      source: myList,
      appendTo: "#loginDiv"
    });
  };

  $(document).ready(function() {
    $.getJSON('StarWars.php', function(data) {
      myList = JSON.parse(data);
      //alert(myList); //DOES NOTHING WHEN UNCOMMENTED!!!!
      setTextSuggest();
    });
  });
</script>

当我用 'data["info"]' 替换警报中的 myList 时,它会吐出我期望的 JSON 信息。但是,如果我取消注释警报并在 myList 上运行它,则根本不会打印任何内容。myList 应该在这里具有全局范围,但我无法弄清楚为什么它没有在我准备好的函数中分配。

有人对如何解决此问题有任何建议吗?

编辑:

以下是从 StarWars.php 返回的对象(通过 json_encode 创建):

{"UserList":["Han Solo","Leia Organa","Luke Skywalker","Darth Vader","Emperor Palpatine","Chewbacca","R2-D2","C-3PO","Lando Calrissian","Lobot","Yoda","Obi-Wan Kenobi","Uncle Owen","Aunt Beru","Wedge Antilles","Boba Fett"]}

如果我将 getJSON 请求设置为:

$.getJSON('StarWars.php', function(data) {
    myList = data.UserList;
    alert(myList);
    setTextSuggest();
});

然后它向我显示了名称列表,但我的自动完成中仍然没有设置任何内容。

编辑2:

我已经接受了杰克对这个问题的回答。虽然我的代码仍然存在问题(尚未附加自动完成功能),但 Jack 的解决方案已将其移出关于全局变量和 JSON 数据检索问题的领域,并转移到有关正确使用 jQuery 1.8 自动完成功能的问题中。我觉得这是一个不同的问题,所以我将此问题标记为已完成。-DG

4

2 回答 2

3

从你的问题来看,data已经是一个合适的数组/对象(不是文本),所以你根本不需要JSON.parse()

应该这样做:

myList = data;
于 2012-07-02T18:53:29.287 回答
0

全局或局部范围的问题不是这里的问题。您的警报仍应触发并显示[object Object],因为您没有引用使用声明的对象的任何属性data

我创建了以下 jsFiddle 作为参考:http: //jsfiddle.net/u8rVj/。您将看到上述观察结果确实发生了。

JSON 输出是什么?

于 2012-07-02T18:53:36.023 回答