d3.json, d3.xhr и междоменные проблемы

Сегодня я провел несколько тестов, связанных с тем, как мы можем загружать json-файлы с помощью d3, потому что меня заинтриговал этот вопрос: d3.json работает, но $. getJson не работает. Однако некоторые из тестов, которые я сделал, немного сложны.

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, но я не могу понять несколько других вещей:

  1. если обратный вызов всегда выполняется (даже жестко иногда с ОК 200, который также может быть ошибкой, как видно из методов jQuery .ajax() и .getJSON()), почему я могу видеть данные только в одном случае (первом) - остальные случаи всегда являются ошибками?

  2. Какие типы MIME поддерживаются методом d3.xhr?

  3. если d3.json был просто хорошей оболочкой для d3.xhr, почему пример 1 работает, а пример 2 не работает...? Я хотел бы получить некоторые разъяснения. В основном я использую d3 с файлами со своего сервера, но бывают и такие случаи, когда мне приходится использовать еще и какие-то внешние данные, и было бы очень неплохо сделать это и с D3, а не только с jQuery.

Я думаю, должен быть список со всеми типами MIME, принимаемыми этими методами.

10
задан Community 23 May 2017 в 11:46
поделиться