この質問に興味をそそられたので、今日、d3 でjsonファイルをロードする方法に関連するいくつかのテストを行いました。ただし、私が行ったテストのいくつかは少しトリッキーです。
d3.xhr("http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=select+*+where+%7B%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FRoger_Federer%3E+%3Fp+%3Fo+filter%28lang%28%3Fo%29+%3D+%27en%27%29%7D%0D%0A&debug=on&timeout=&format=application%2Fsparql-results%2Bjson&save=display&fname=", function(data)
console.log("success1");
alert(data);
});
d3.json("http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=select+*+where+%7B%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FRoger_Federer%3E+%3Fp+%3Fo+filter%28lang%28%3Fo%29+%3D+%27en%27%29%7D%0D%0A&debug=on&timeout=&format=application%2Fsparql-results%2Bjson&save=display&fname=", function(data){ console.log("success2");
alert(data);
});
d3.xhr("http://api.worldbank.org/countries/BRA/indicators/BX.KLT.DINV.CD.WD?per_page=10&date=2007:2012&format=json", function(data){
console.log("success3");
alert(data);
})
d3.json("http://api.worldbank.org/countries/BRA/indicators/BX.KLT.DINV.CD.WD?per_page=10&date=2007:2012&format=json", function(data){
console.log("success4");
alert(data);
})
問題が少なくとも 2 つの理由 (MIME タイプと CORS) に関連している可能性があることはわかっていますが、他のいくつかのことは理解できません。
コールバックが常に実行される場合 (jQuery の .ajax() および .getJSON() メソッドから見られるように、エラーになる可能性がある OK 200 で場合によっては厳しい場合もあります) 1 つのケース (最初のケース) でのみデータを表示できるのはなぜですか? - 残りのケースは常にエラーですか?
d3.xhr メソッドでサポートされている MIME タイプは何ですか?
d3.json が d3.xhr の単なるラッパーである場合、なぜ例 1 が機能し、例 2 が機能しないのですか? 説明をお願いします。私は主にサーバーからのファイルで d3 を使用しますが、外部データも使用する必要がある場合は、このような場合があり、jQuery だけでなく D3 でもこれを行うと非常に便利です。
これらのメソッドで受け入れられるすべての MIME タイプのリストが必要だと思います。