我试图能够动态重新加载我将用于自动完成字段的变量,但是我在加载初始调用时遇到问题。目前,我的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:
我接受了杰克对这个问题的回答。虽然我的代码仍然存在问题(自动完成尚未附加),但杰克的解决方案已将其从全局变量和JSON数据检索问题的范围中移除,并进入了关于正确使用jQuery 1.8自动完成的问题。我觉得这是一个不同的问题,所以我将此问题标记为完整。 -D.G。
答案 0 :(得分:3)
从您的问题来看,data
已经是一个正确的数组/对象(不是文本),因此您根本不需要JSON.parse()
。
这应该做:
myList = data;
答案 1 :(得分:0)
全球或地方范围的问题不是问题。您的警报仍然会触发并显示[object Object]
,因为您没有引用使用data
声明的对象的任何属性。
我创建了以下jsFiddle作为参考:http://jsfiddle.net/u8rVj/。您将看到上述观察确实发生。
什么是JSON输出?