Próbuję załadować model 3D do Three.js za pomocą JSONLoader
, a ten model 3D jest w tym samym katalogu co cała strona.
I'm getting the "Cross origin requests are only supported for HTTP."
error, but I don't know what's causing it nor how to fix it.
Moja kryształowa kula mówi, że ładujesz model używając albo file://
albo C:/
, co pozostaje w zgodzie z komunikatem błędu, ponieważ nie są one http://
.
Więc możesz albo zainstalować webserver w swoim lokalnym komputerze lub załadować model gdzieś indziej i użyć jsonp
i zmienić adres url na http://example.com/path/to/model
.
Origin jest zdefiniowany w RFC-6454 jako
...mają ten sam
schemat, host i port. (Zobacz Sekcję 4 po pełne szczegóły.)
Więc nawet jeśli twój plik pochodzi z tego samego hosta (localhost
), ale tak długo jak schemat jest inny (http
/ file
), są one traktowane jako różne pochodzenie.
Tak, błąd mówi, że nie można skierować przeglądarki bezpośrednio na file://some/path/some.html
.
Oto kilka opcji szybkiego uruchomienia lokalnego serwera WWW, aby umożliwić przeglądarce renderowanie lokalnych plików
Jeśli masz zainstalowanego Pythona...
Zmień katalog na folder, w którym znajduje się Twój plik some.html
lub plik(i), używając polecenia cd /path/to/your/folder
.
Uruchom serwer WWW w Pythonie używając komendy python -m SimpleHTTPServer
.
Spowoduje to uruchomienie serwera WWW do hostowania całej listy katalogów pod adresem http://localhost:8000
.
python -m SimpleHTTPServer 9000
dając ci link: http://localhost:9000
.To podejście jest wbudowane w każdą instalację Pythona.
Wykonaj te same kroki, ale zamiast tego użyj następującej komendy python3 -m http.server
.
Alternatywnie, jeśli potrzebujesz bardziej responsywnej konfiguracji i już używasz nodejs...
Zainstaluj http-server
poprzez wpisanie npm install -g http-server
.
Przejdź do swojego katalogu roboczego, gdzie znajduje się twój ome.html
.
Uruchom swój serwer http poprzez wydanie http-server -c-1
.
To uruchamia Node.js httpd, który serwuje pliki w twoim katalogu jako pliki statyczne dostępne z http://localhost:8080
.
Jeśli twoim preferowanym językiem jest Ruby ... Bogowie Ruby mówią, że to działa równie dobrze:
ruby -run -e httpd . -p 8080
Oczywiście PHP też ma swoje rozwiązanie.
php -S localhost:8000
Wpadłem na to dzisiaj.
Napisałem trochę kodu, który wyglądał tak:
app.controller('ctrlr', function($scope, $http){
$http.get('localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
...ale powinien'y wyglądać tak:
app.controller('ctrlr', function($scope, $http){
$http.get('http://localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
Jedyną różnicą był brak http://
w drugim fragmencie kodu.
Chciałem to tylko ujawnić na wypadek, gdyby byli inni z podobnym problemem.