0

私はこれに 1 時間かかりましたが、助けが必要です。これは私を困惑させるようなものです。私のコードでのオブジェクトの明示的な設定を考えてみましょう:

ワーキングケース:


var terms={};
            terms[0]={}; 
            terms[1]={"label":"bag","cell_src":"images/bag.jpg","clue_type":"audio","clue_src":"/audio/bus.wav"};
            terms[2]={"label":"crayon","cell_src":"images/crayon.jpg","clue_type":"audio","clue_src":"/audio/car.wav"};
            terms[3]={"label":"pen","cell_src":"images/pen.jpg","clue_type":"audio","clue_src":"/audio/car.wav"};
            terms[4]={"label":"pencil","cell_src":"images/pencil.jpg","clue_src":"/audio/boat.wav"};
            terms[5]={"label":"pencil_case","cell_src":"images/pencil_case.jpg","clue_src":"/audio/train.wav"};
            terms[6]={"label":"rubber","cell_src":"images/rubber.jpg","clue_src":"/audio/taxi.wav"};
            terms[7]={"label":"ruler","cell_src":"images/ruler.jpg","clue_src":"/audio/plane.wav"};
            terms[8]={"label":"sharpener","cell_src":"images/sharpener.jpg","clue_src":"/audio/taxi.wav"}; 
           window.terms= terms;
window.terms= terms; // for using globaly 

console.log(window.terms[1]); を実行すると 「かばん」を頂きました。それが私が欲しいものです。

動作しないケース


term{} の値を明示的に定義する代わりに、json ファイルからコンテンツを読み取り、次のように列挙された各インデックスに割り当てます。

var terms={};
terms[0]={};
$.getJSON('content.json', function(data){

  $.each(data,function(i){
    //terms[i]={"label":"bag","cell_src":"images/bag.jpg","clue_type":"audio","clue_src":"/audio/bus.wav"};
    terms[i+1]={"label":data[i].headword,"cell_src":data[i].image,"clue_type":"audio","clue_src":data[i].audio};

  });
  window.terms=terms;   
});

console.log(window.terms[1]); を実行すると 「Uncaught TypeError: 未定義のプロパティ '1' を読み取ることができません」というエラーが表示されるすべてのインデックスに同じ静的値。それは同じエラーを生成します。

これがどのようになるかについてのアイデアはありますか??

4

3 に答える 3

1

この関数は、JSONファイルをロードする$.getJSON()ための呼び出しの省略形にすぎません。$.ajax()AJAX呼び出しは非同期であるため$.getJSON()、データがロードされて変数に格納される前に、実行が完了し、実行された後のすべてのコードが実行されます。

を使用する場合は、に渡すコールバック関数terms内でsuccess操作します$.getJSON()

コードが次のようになっている場合:

var terms={};
terms[0]={};
$.getJSON('content.json', function(data){

  $.each(data,function(i){
    //terms[i]={"label":"bag","cell_src":"images/bag.jpg","clue_type":"audio","clue_src":"/audio/bus.wav"};
    terms[i+1]={"label":data[i].headword,"cell_src":data[i].image,"clue_type":"audio","clue_src":data[i].audio};

  });
  window.terms=terms;   
});

// use window.terms here

// use window.terms hereの部分は、AJAX呼び出しが終了する前に実行されるため、機能しません。これを別の関数に移動し、successコールバックから呼び出す必要があります。

function workWithTerms() {
    // use window.terms here
}

var terms={};
terms[0]={};
$.getJSON('content.json', function(data){

  $.each(data,function(i){
    //terms[i]={"label":"bag","cell_src":"images/bag.jpg","clue_type":"audio","clue_src":"/audio/bus.wav"};
    terms[i+1]={"label":data[i].headword,"cell_src":data[i].image,"clue_type":"audio","clue_src":data[i].audio};

  });
  window.terms=terms;   
  workWithTerms();
});
于 2013-03-21T16:00:13.903 に答える
1

$.getJSONAJAX 呼び出しを実行するときにブロックしません。コールバック チェーンを有効にしておく必要があります。

于 2013-03-21T15:58:06.947 に答える
1

用語をオブジェクトの配列として定義したいと思います。現在、プロパティ1、2、3などを持つオブジェクトとして定義されています。構文のようなvar terms = {}手段termsはオブジェクトであり、代入terms[1] = {"label": "bag"}すると、「オブジェクト用語の1という名前のプロパティは です{"label": "bag"}。用語宣言を次のように変更するだけです:

var terms = [];

また、オブジェクトの 1 つのラベル プロパティを表示する場合、ログ ステートメントは次のようになります。

console.log(terms[2].label);
于 2013-03-21T16:05:19.623 に答える