2014-01-08 8 views
6

d3을 배우고 CSV 파일에서 데이터를 가져 오려고하는데 "XMLHttpRequest가 file : /// Users/Laura/Desktop/SampleECG.csv 교차 출처 요청은 HTTP에서만 지원됩니다. " 이 오류를 수정하고 로컬 웹 서버에서 실행 한 방법을 검색했지만 d3.v2.js에서 작동하는 솔루션을 찾지 못했습니다. 다음은 코드 샘플입니다.d3의 csv 파일에서 데이터를 가져올 수 없습니다.

var Time = [] 
    ECG1 = [] 

d3.csv("/Desktop/d3Project/Sample.csv", function(data) 
     { 
     Time = data.map(function(d) {return [+d["Time"]];}); 
     ECG1 = data.map(function(d) {return [+d["ECG1"]];}); 
     console.log(Time) 
     console.log(ECG1) 
     }); 

모든 도움을 주시면 감사하겠습니다.

+1

로컬 웹 서버를 실행하고 있습니까? 예 : [이 튜토리얼] (http://alignedleft.com/tutorials/d3/setup). –

+0

로컬 웹 서버에서 어떤 문제가 발생 했습니까? Ajax 요청은'file :'프로토콜에서 작동하지 않으므로 웹 서버 (로컬이든 아니든간에)가 필요합니다. 동일한 서버에서 스크립트와 csv 파일을 모두 서버하는 것이 이상적입니다. – nullability

+0

나는 똑같은 문제에 직면 해있다. 올바른 파일 경로를 부여 했습니까? file : ///을 열려면 로컬 서버를 사용하여 요청을 수행해야합니다. 파이어 폭스를 먼저여십시오. 이것은 요청 예외를 처리하기 때문입니다. 가능한 한 많은 정보 (예 : 콘솔 로그 및 추가 정보)를 제공해주세요. – divakar

답변

15

너무 혼란 스럽습니다. (나 또한 d3 초보자입니다.)

그래서 어떤 이유로 보안상의 이유로 웹 브라우저가 로컬 데이터로드에 만족하지 않습니다. 어쨌든이 문제를 해결하려면 로컬 웹 서버를 실행해야합니다. 이것은 쉽다.

python -m SimpleHTTPServer 8888 & 

자, 이제 한 해당 터미널 창을 열고 실행되고, 해당 지역의 8888 웹 : 웹 사이트의 문서 루트 (감사 @daixtr), 유형 -ing cd 후 터미널에서

, 서버가 실행 중입니다. 내가 크롬에서 그것을 열었을 때

은 그래서 내 경우, 원래 내가 작업 한 웹 페이지가

file://localhost/Users/hills/Desktop/website/visualizing-us-bls-data-inflation-and-prices.html 

를 불렀다. 내 로컬 웹 서버에 내 페이지를 열려면, 그냥 (크롬 검색 창에) 입력 :
http://localhost:8888/Desktop/website/visualizing-us-bls-data-inflation-and-prices.html 

지금, CSV를 읽는 것은 작동합니다. 이상한, 알아.

+0

나는 이것을 시도해 콘솔에서이 오류가 발생했다. XMLHttpRequest는 http : // localhost : 8888/test.csv를로드 할 수 없다. 'Access-Control-Allow-Origin'헤더가 요청 된 리소스에 없습니다. 따라서 원본 'null'은 액세스가 허용되지 않습니다. 이 문제도 만난 적이 있습니까? –

+0

귀하의 의견과 동일한 문제가 발생했을 경우 HTML 페이지를 '.csv'와 동일한 방식으로 요청하여 동일한 출처를 갖도록하십시오. 따라서 윈도우 탐색기에서'.html' 파일을 열지 말고 브라우저에서 요청하십시오 :'http : // localhost : 8888/Desktop/website/mypage.html' –

5

파이썬 웹 서버가 내장되어 있고 여전히 문제가있는 분은 잊지 말고 "python -m SimpleHTTPServer 8888"호출을 DocumentRoot로 간주하는 올바른 경로에서 실행하십시오. 즉, 'python -m SimpleHTTPServer 8888'을 어디에서나 실행할 수는 없습니다. 실제로는 'cd/to/correct/path /'에 index.html 또는 data.tsv가 들어 있어야합니다. 그리고 나서 'python -m SimpleHTTPServer 8888'이 실행됩니다.

+0

그게 중요한 포인트입니다. 사람들이 볼 수 있도록 기본 답변에 추가했습니다. –

0

Chrome이 수행하려고 시도하는 Firefox, idk

관련 문제