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>

アラートのmyListを'data["info"]'に置き換えると、期待している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データの取得に関する質問の領域から、jQuery1.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 に答える