Sto cercando di caricare un modello 3D in Three.js con JSONLoader
, e quel modello 3D è nella stessa directory dell'intero sito web.
Sto ottenendo l'errore "Cross origin requests are only supported for HTTP."
, ma non so cosa lo stia causando né come risolverlo.
La mia sfera di cristallo dice che stai caricando il modello usando file://
o C:/
, che rimane fedele al messaggio d'errore poiché non sono http://
.
Quindi puoi installare un webserver nel tuo PC locale o caricare il modello da qualche altra parte e usare jsonp
e cambiare l'url in http://example.com/path/to/model
.
L'origine è definita in RFC-6454 come
...hanno lo stesso
schema, host e porta. (Vedere la Sezione 4 per tutti i dettagli).
Quindi anche se il tuo file proviene dallo stesso host (localhost
), ma finché lo schema è diverso (http
/ file
), sono trattati come origini diverse.
Solo per essere esplicito - Sì, l'errore sta dicendo che non puoi puntare il tuo browser direttamente a file://some/path/some.html
.
Qui ci sono alcune opzioni per far girare velocemente un server web locale per permettere al tuo browser di renderizzare i file locali
Se hai installato Python...
Cambiare directory nella cartella dove esiste il tuo file some.html
o il tuo file(s) usando il comando cd /path/to/your/folder
.
Avvia un server web Python usando il comando python -m SimpleHTTPServer
.
Questo avvierà un server web per ospitare il tuo intero elenco di directory su http://localhost:8000
.
python -m SimpleHTTPServer 9000
dandoti il link: http://localhost:9000
.Questo approccio è integrato in qualsiasi installazione di Python.
Fai gli stessi passi, ma usa il seguente comando invece python3 -m http.server
.
In alternativa, se si richiede una configurazione più reattiva e si usa già nodejs...
Installare http-server
digitando npm install -g http-server
.
Cambia nella tua directory di lavoro, dove si trova il tuo some.html
.
Avvia il tuo server http emettendo http-server -c-1
.
Questo fa partire un httpd Node.js che serve i file nella tua directory come file statici accessibili da http://localhost:8080
Se il tuo linguaggio preferito è Ruby ... gli dei di Ruby dicono che anche questo funziona:
ruby -run -e httpd . -p 8080
Naturalmente anche PHP ha la sua soluzione.
php -S localhost:8000
Mi sono imbattuto in questo oggi.
Ho scritto del codice che assomiglia a questo:
app.controller('ctrlr', function($scope, $http){
$http.get('localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
...ma avrebbe dovuto essere così:
app.controller('ctrlr', function($scope, $http){
$http.get('http://localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
L'unica differenza era la mancanza di http://
nel secondo frammento di codice.
Volevo solo metterlo in evidenza nel caso ci siano altri con un problema simile.