Estoy intentando cargar un modelo 3D en Three.js con JSONLoader
, y ese modelo 3D está en el mismo directorio que toda la web.
Me aparece el error `"Las solicitudes de origen cruzado sólo se admiten para HTTP."pero no sé cuál es la causa ni cómo solucionarlo.
Mi bola de cristal dice que estás cargando el modelo usando file://
o C:/
, lo que se ajusta al mensaje de error ya que no son http://
.
Así que puedes instalar un servidor web en tu PC local o cargar el modelo en otro lugar y utilizar jsonp
y cambiar la url a http://example.com/path/to/model
.
El origen se define en RFC-6454 como
...tienen el mismo
esquema, host y puerto. (Véase la sección 4 para más detalles).
Así que aunque su archivo se origine en el mismo host (localhost
), pero mientras el esquema sea diferente (http
/ file
), se tratan como orígenes diferentes.
Sólo para ser explícito - Sí, el error está diciendo que no puede apuntar su navegador directamente a file://some/path/some.html
.
Aquí hay algunas opciones para hacer girar rápidamente un servidor web local para permitir que su navegador renderice los archivos locales
Si tienes Python instalado...
Cambia el directorio a la carpeta donde existe tu archivo algo.html
o archivo(s) usando el comando cd /ruta/a/tu/carpeta
.
Inicie un servidor web Python utilizando el comando python -m SimpleHTTPServer
.
Esto iniciará un servidor web para alojar todo su listado de directorios en http://localhost:8000
.
python -m SimpleHTTPServer 9000
que te dará el enlace: http://localhost:9000
Este enfoque está incorporado en cualquier instalación de Python.
Haz los mismos pasos, pero utiliza el siguiente comando en lugar de python3 -m http.server
.
Alternativamente, si usted exige una configuración más responsiva y ya utiliza nodejs...
Instala http-server
escribiendo npm install -g http-server
Cambia a tu directorio de trabajo, donde vive tu some.html
.
Inicie su servidor http con http-server -c-1
.
Esto pone en marcha un Node.js httpd que sirve los archivos en su directorio como archivos estáticos accesibles desde http://localhost:8080
.
Si tu lenguaje preferido es Ruby... los dioses de Ruby dicen que esto también funciona:
ruby -run -e httpd . -p 8080
Por supuesto, PHP también tiene su solución.
php -S localhost:8000
Me encontré con esto hoy.
Escribí un código que se parecía a esto:
app.controller('ctrlr', function($scope, $http){
$http.get('localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
...pero debería ser así:
app.controller('ctrlr', function($scope, $http){
$http.get('http://localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
La única diferencia era la falta de http://
en el segundo fragmento de código.
Sólo quería poner esto por si hay otros con un problema similar.