2012-07-02 117 views
1

我試圖能夠動態地重新加載我將用於自動完成字段的變量,但我在加載初始調用時遇到了問題。目前,我的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.

+0

該問題將更有可能在於myList的範圍。將setTextSuggest和var myList放入document.ready中,它應該可以工作。 –

+1

我不同意。一旦這個回調命中,myList被重新分配給'JSON.parse(data)',所以它以前發生了什麼並不重要。除非'myList'在多個位置異步更改,否則這不應該是範圍問題。我的建議是在JSON.parse行之前使用'debugger'語句,並在分析之前查看數據,然後查看myList。 – AlexMA

回答

3

從你的問題判斷,data已經是一個正確的數組/對象(不是文本),所以你完全不需要JSON.parse()

只是這應該這樣做:

myList = data; 
+0

你是正確的,myList開始接受信息編輯時,但它仍然沒有被正確解析用作一個javascript數組。不過,謝謝你指出。 –

+0

@ D.G。這是一個不同的問題;你使用了哪個自動完成庫? –

0

的全球或局部範圍內的事情是不是這裏的問題。您的警報仍然應該觸發並顯示[object Object],因爲您沒有引用使用data聲明的對象的任何屬性。

我創建了以下jsFiddle作爲參考:http://jsfiddle.net/u8rVj/。你會看到上述觀察確實發生。

什麼是JSON輸出?