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 回答