我試圖能夠動態地重新加載我將用於自動完成字段的變量,但我在加載初始調用時遇到了問題。目前,我的javascript由這樣的:javascript/jquery全局變量未被賦值
<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>
當我在與警報替換myList中「數據[‘信息’]」,它吐出來的是JSON的信息,我很期待。但是,如果我要取消註釋並在myList上運行它,則什麼也不會打印。 myList應該在這裏具有全局作用域,但我無法弄清楚爲什麼它不是在我的準備好的函數中分配的。
有沒有人有任何建議如何解決這個問題?
編輯:
下面是(經由json_encode創建)從StarWars.php正在返回的對象:
{"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.
該問題將更有可能在於myList的範圍。將setTextSuggest和var myList放入document.ready中,它應該可以工作。 –
我不同意。一旦這個回調命中,myList被重新分配給'JSON.parse(data)',所以它以前發生了什麼並不重要。除非'myList'在多個位置異步更改,否則這不應該是範圍問題。我的建議是在JSON.parse行之前使用'debugger'語句,並在分析之前查看數據,然後查看myList。 – AlexMA