2012-07-23 53 views
2

我使用d3.json()請求JSON對象和分析/可視化吧...D3 JSON請求得到XmlHttpRequest的錯誤:地空沒有被允許訪問控制允許來源

這是被請求從一個Java Servlet的doGet功能...我知道一個事實,即我的Java服務器成功發送JSON到瀏覽器。但是,我遇到了試圖解析json的問題。 d3.json應該執行http獲取請求,但由於某種原因,它返回一個XML請求錯誤:

XMLHttpRequest無法加載「http:// localhost:8080/cluster」。 Access-Control-Allow-Origin不允許Origin null。

是否有一些進一步的設置,我應該知道與d3.json或它應該只是開箱即用?這是我的代碼..

d3.json("http://localhost:8080/cluster", function(json) {  

      //do visualization 
      var node = vis.data([json]).selectAll("g.node") 
      .data(pack.nodes) 
      .enter().append("g") 
      .attr("class", function(d) {return d.children ? "node" : "leaf node" ;}) 
      .attr("transform", function(d) {return "translate(" + d.x + "," + d.y +")"; }); 

      node.append("title") 
       .text(function(d) { return d.name + (d.children ? "" : ": " + format(d.size)); }); 



      node.append("circle") 
      .attr("r", function(d) { return d.r; }); 

      node.filter(function(d) { return !d.children; }).append("text") 
      .attr("text-anchor", "middle") 
      .attr("dy", ".3em") 
      .text(function(d) { return d.name.substring(0, d.r/3); }); 
    } 

我在這裏做錯了什麼?我主要感到困惑,因爲d3.json應該默認做一個HTTP get,但是它返回一個XMLHTTPrequest錯誤...

+1

它與D3無關,如果訪問不被允許,您對另一個域所做的任何XMLHTTPRequest都會拋出此錯誤。你如何加載包含此代碼的頁面? – 2012-07-24 00:03:58

+0

我明白了...我該如何解決跨平臺的資源共享問題?這是應該在JavaScript或我的碼頭服務器中設置的東西嗎? – capkutay 2012-07-24 00:08:54

+1

您的服務器必須設置適當的HTTP標頭。請參閱https://en.wikipedia.org/wiki/Cross-origin_resource_sharing。但是如果服務器也在服務這個頁面,那麼你應該這樣做。 – 2012-07-24 00:11:31

回答

0

如果您使用文件協議(file:///)加載HTML文件,那麼你會遇到這個問題。嘗試使用localhost加載html文件,這應該可以解決問題。