0

D3.js を使用して json データをロードする次のコードがあります。

this.clickCountry = function(d) {
    "use strict"
    var time_for_remove = 500,
        time_for_zoom = 900
    d3.selectAll("svg g").transition().delay(time_for_remove + time_for_zoom - 200).remove()
    self.svg.append("g")
        .attr("id", "country")
    self.regionsGroup = self.svg.select("#country")
    var adm1_key = d.id+"_adm1"
    try {
        var adm1_path = "../topo/"+d.id+"_adm1.json"
    } catch (e) {
        console.log(e)    // "MyError"
    }
    var adm1_path = "../topo/"+d.id+"_adm1.json"
    d3.json(adm1_path, function(error, topology) {
        var regions = topology.objects
        for(var adm1_key in regions) { 
            var o = regions[adm1_key]
        }
        self.regionsGroup.selectAll("path")
        .data(topojson.object(topology, o).geometries)
        .enter().append("path")
        .attr("d", self.projection)
        .attr("id", function(d) {
            return d.properties.name
        })
        .classed("country", true)
        .attr("class", "country")
        .on("mouseover", function(d) {
            d3.select(this)
            .style("fill", "#6C0")
            .append("svg:title")
            .text(d.properties.name)
        })
        .on("mouseout", function(d) {
            d3.select(this)
            .style("fill", "#000000")
        })
        .on("click", function(d) {
            console.log('clicked on country')
            var p = d3.mouse(this)                                                                     
            console.log(p+" "+self.map.invert(p))                                                          
            self.map.center(self.map.invert(p))
        })
    })
}

adm1_path = "../topo/"+d.id+"_adm1.json"実際にマップを描画する前にファイルが存在するかどうかを確認する正しい方法は何ですか?

4

1 に答える 1

4

次のような関数を含めることができます。

function fileExists(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}

次に、コードを次のように変更します。

var adm1_path = "../topo/"+d.id+"_adm1.json"
if (!fileExists(adm1_path)) {
    alert('We couldn't find that country!') //or some other suitable error/display mechanism
    return;
}

d3.json(adm1_path, function(error, topology) {
于 2013-02-24T17:22:58.557 に答える