2016-07-07 17 views
0

D3は変数で参照されるJSONデータを取得しない奇妙なエラーがありますが、コンソールログからコピーして貼り付けると、同じ変数に置き換えます。D3予期せぬ値の翻訳、変数の受け入れを受け付けません

ので、JSONのこのソースは動作しません。

function reformat(data) { 

var jsonObject = JSON.parse(data, function(k, v) { 
    return (typeof v === "object" || isNaN(v)) ? v : parseInt(v, 10); 
}); 

var treeData = (JSON.stringify(makeTree(jsonObject), null, 4)); 
//etc code for D3 
} 

しかし、私は文字通りコンソールを介してそれを印刷し、そのように宣言した場合:

treeData = [ 
    { 
     "id": 1, 
     "name": "Start", 
     "children": [ 
      { 
       "id": 2, 
       "name": "Decision A", 
       "children": [ 
        { 
         "id": 4, 
         "name": "Possibility A-1", 
         "children": [ 
          { 
           "id": 8, 
           "name": "Consequence A-1" 
          } 
         ] 
        }, 
        { 
         "id": 5, 
         "name": "Possibility A-2", 
         "children": [ 
          { 
           "id": 9, 
           "name": "Consequence A-2" 
          } 
         ] 
        } 
       ] 
      }, 
      { 
       "id": 3, 
       "name": "Decision B", 
       "children": [ 
        { 
         "id": 6, 
         "name": "Possibility B-1", 
         "children": [ 
          { 
           "id": 10, 
           "name": "Consequence B-1" 
          } 
         ] 
        }, 
        { 
         "id": 7, 
         "name": "Possibility B-2", 
         "children": [ 
          { 
           "id": 11, 
           "name": "Consequence B-2" 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    } 
]; 

は突然正常に動作します。変数のコピーと再宣言を続けることはできません。出力が同じ場合、なぜそれを受け入れないのですか?

機能は、Webページのロード時に1回呼び出されます:

function reqListener() { 
     console.log(this.responseText); 
    } 

    var oReq = new XMLHttpRequest(); 
    oReq.onload = function() { 

     reformat(this.responseText); 
    }; 
    oReq.open("get", "getData.php", true); 

    oReq.send(); 

答えて

3

なぜあなたはJSONを文字列化してtreeDataにそれを渡すのですか?

代わりの

var treeData = (JSON.stringify(makeTree(jsonObject), null, 4)); 

この

var treeData = makeTree(jsonObject); 

これは動作するはずです。

関連する問題