0

json ファイルから読み取り、その値を使用して三角形を描画したいと考えています。ルーチンにいる間、値を出力できますが、それ以外では機能しなくなります。私のコード:

faces=new Array(40000);
$.getJSON('file.json', function(data) {
   $.each(data.faces, function(i, f) {
faces[i]=new Array(3);
faces[i][1]=data.faces[i].f1;
faces[i][2]=data.faces[i].f2;
faces[i][3]=data.faces[i].f3;
 //alert(faces[1][1]); works here
 });
 });
 //alert(faces[1][1]); doesn't work here, console says faces[1][1] is undefined

どうすればこれを修正できますか?

4

4 に答える 4

2

への呼び出し$.getJSONは非同期ですfaces。すでにお気づきのように、配列はコールバック内に入力されているだけです。

あなたができることは次のとおりです。

faces=new Array(40000);
$.getJSON('file.json', function(data) {
  $.each(data.faces, function(i, f) {
    faces[i]=new Array(3);
    faces[i][1]=data.faces[i].f1;
    faces[i][2]=data.faces[i].f2;
    faces[i][3]=data.faces[i].f3;
     //alert(faces[1][1]); works here
  });
  someFunction();
});

someFunction() {
  alert(faces[1][1]);
}

それが役に立てば幸い。

于 2013-08-27T08:09:42.927 に答える
0

これは、getJSON が非同期であるために発生します。

async プロパティが定義された jquery ajax メソッドを使用してみてください。

   $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });
于 2013-08-27T08:11:08.377 に答える
0

2 番目のケースでは、JSON を実際に取得するための呼び出しは、の非同期性のために、「成功」/「完了」コールバック以外の使用ポイントに到達するのにかかるよりも時間がかかるgetJSONため、値関数が戻るまで当然未定義であるため、「成功」/「完了」関数です。

于 2013-08-27T08:11:09.113 に答える
-1

シンプルな変更、

faces=new Array(40000);
$.getJSON('file.json', function(data) {
 $.each(data.faces, function(i, f) {
  faces[i]=new Array(3);
  faces[i][1]=f.f1;
  faces[i][2]=f.f2;
  faces[i][3]=f.f3;
 });
});

$.each 内で data.faces の代わりに f を使用します

于 2013-08-27T08:12:00.513 に答える