0

次のように、JSON 配列を変数に割り当てようとしています。

$.getJSON("tljson.json",function(result){
  items = JSON.stringify(result);
});

そして、その変数を関数の外で呼び出します。

timeline.draw (items,options);

getJSON 関数内でアラート (項目) を使用すると機能しますが、関数の外では「未定義」を返すだけです。getJSON 関数でアイテムをグローバル変数として宣言したので、これでうまくいくと思いました。私は何を間違っていますか?

4

2 に答える 2

2

You're probably not waiting for the getJSON function to complete. It's asynchronous which means that code under it will execute before code in the callback function.

alert(1);
$.getJSON("tljson.json",function(result){
  alert(2);
  items = JSON.stringify(result);
});
alert(3);

The example above actually alerts 1 then 3 then 2. Note that the 3 is before the 2.

コードを修正するには、コールバック関数が呼び出されて値を代入できるようになるまで待ってから、itemsその変数を使用する必要があります。解決方法は状況によって異なる場合がありますが、簡単なアイデアは、コールバック内から何らかの関数を呼び出すことです。

$.getJSON("tljson.json",function(result){
  items = JSON.stringify(result);
  doSomethingWithItems();
});

function doSomethingWithItems() {
  alert(items); // Correctly alerts items.
}
于 2012-12-18T04:47:18.887 に答える
1

This is because your code is executing before response from getJSON is received. Use it like:

  function afterGetJSON(items) {
    timeline.draw (items,options);
  }

  $.getJSON("tljson.json",function(result){
    items = JSON.stringify(result);
    afterGetJSON(items);

  });
于 2012-12-18T04:47:06.957 に答える