d3.jsonp = function (url, callback) { function rand() { var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', c = '', i = -1; while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52)); return c; } function create(url) { var e = url.match(/callback=d3.jsonp.(\w+)/), c = e ? e[1] : rand(); d3.jsonp[c] = function(data) { callback(data); delete d3.jsonp[c]; script.remove(); }; return 'd3.jsonp.' + c; } var cb = create(url), script = d3.select('head') .append('script') .attr('type', 'text/javascript') .attr('src', url.replace(/(\{|%7B)callback(\{|%7D)/, cb)); };