Ik probeer een 3D model in Three.js te laden met JSONLoader
, en dat 3D model staat in dezelfde directory als de hele website.
Ik'krijg de "Cross origin requests are only supported for HTTP."
foutmelding, maar ik'weet niet wat'de oorzaak is, noch hoe het op te lossen.
Mijn kristallen bol zegt dat u het model laadt met file://
of C:/
, wat overeenkomt met de foutmelding omdat ze niet http://
zijn
U kunt dus een webserver installeren op uw lokale PC of het model ergens anders uploaden en jsonp
gebruiken en de url veranderen in http://example.com/path/to/model
Origin is gedefinieerd in RFC-6454 als
...ze hebben dezelfde
schema, host, en poort. (Zie Sectie 4 voor volledige details.)
Dus ook al komt je bestand van dezelfde host (localhost
), maar zolang het schema verschillend is (http
/ file
), worden ze behandeld als verschillende origin.
Even voor de duidelijkheid - Ja, de fout zegt dat je browser niet direct naar file://some/path/some.html
kan wijzen
Hier zijn wat opties om snel een lokale webserver op te starten om je browser lokale bestanden te laten renderen
Als je Python geïnstalleerd hebt...
Verander van map in de map waar uw bestand some.html
of bestand(en) bestaan met het commando cd /path/to/your/folder
Start een Python webserver op met het commando python -m SimpleHTTPServer
.
Dit zal een webserver starten om uw gehele maplijst te hosten op http://localhost:8000
python -m SimpleHTTPServer 9000
waardoor u link: http://localhost:9000
Deze aanpak is ingebouwd in elke Python installatie.
Doe dezelfde stappen, maar gebruik in plaats daarvan het volgende commando python3 -m http.server
Als alternatief, als je een meer responsieve setup eist en al nodejs gebruikt...
Installeer http-server
door te typen npm install -g http-server
Ga naar je werkmap, waar je some.html
staat
Start je http server door http-server -c-1
te geven
Dit start een Node.js httpd op die de bestanden in je directory serveert als statische bestanden die toegankelijk zijn vanaf http://localhost:8080
.
Als uw voorkeurstaal Ruby is ... de Ruby Goden zeggen dat dit ook werkt:
ruby -run -e httpd . -p 8080
Natuurlijk heeft PHP ook zijn oplossing.
php -S localhost:8000
Ik kwam dit vandaag tegen.
Ik schreef wat code die er als volgt uitzag:
app.controller('ctrlr', function($scope, $http){
$http.get('localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
...maar het had er zo uit moeten zien:
app.controller('ctrlr', function($scope, $http){
$http.get('http://localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
Het enige verschil was het ontbreken van http://
in het tweede stukje code.
Ik wilde dit alleen maar even kwijt voor het geval er anderen zijn met een soortgelijk probleem.