Προσπαθώ να φορτώσω ένα τρισδιάστατο μοντέλο στο Three.js με το JSONLoader
, και αυτό το τρισδιάστατο μοντέλο βρίσκεται στον ίδιο κατάλογο με ολόκληρο τον ιστότοπο.
Λαμβάνω το σφάλμα "Cross origin requests are only supported for HTTP."
, αλλά δεν ξέρω τι το προκαλεί ούτε πώς να το διορθώσω.
Η κρυστάλλινη σφαίρα μου λέει ότι φορτώνετε το μοντέλο χρησιμοποιώντας είτε το file://
είτε το C:/
, το οποίο παραμένει αληθινό στο μήνυμα σφάλματος, καθώς δεν είναι http://
.
Οπότε μπορείτε είτε να εγκαταστήσετε έναν webserver στον τοπικό σας υπολογιστή είτε να φορτώσετε το μοντέλο κάπου αλλού και να χρησιμοποιήσετε jsonp
και να αλλάξετε το url σε http://example.com/path/to/model
Η προέλευση ορίζεται στο RFC-6454 ως εξής
...έχουν το ίδιο
scheme, host και port. (Δείτε την ενότητα 4 για πλήρεις λεπτομέρειες.)
Έτσι, ακόμη και αν το αρχείο σας προέρχεται από τον ίδιο κεντρικό υπολογιστή (localhost
), αλλά εφόσον το σχήμα είναι διαφορετικό (http
/ file
), αντιμετωπίζονται ως διαφορετικής προέλευσης.
Για να γίνω σαφής - Ναι, το σφάλμα λέει ότι δεν μπορείτε να κατευθύνετε το πρόγραμμα περιήγησής σας απευθείας στο file://some/path/some.html
.
Εδώ είναι μερικές επιλογές για να δημιουργήσετε γρήγορα έναν τοπικό διακομιστή ιστού για να αφήσετε το πρόγραμμα περιήγησής σας να αποδώσει τοπικά αρχεία
Εάν έχετε εγκαταστήσει την Python...
Αλλάξτε κατάλογο στο φάκελο όπου υπάρχει το αρχείο some.html
ή τα αρχεία σας χρησιμοποιώντας την εντολή cd /path/to/your/folder
.
Εκκινήστε έναν διακομιστή ιστού Python χρησιμοποιώντας την εντολή python -m SimpleHTTPServer
Αυτό θα εκκινήσει έναν διακομιστή ιστού για να φιλοξενήσει ολόκληρη την καταχώριση του καταλόγου σας στη διεύθυνση http://localhost:8000
python -m SimpleHTTPServer 9000
δίνοντάς σας σύνδεσμο: http://localhost:9000
Αυτή η προσέγγιση είναι ενσωματωμένη σε κάθε εγκατάσταση Python.
Κάντε τα ίδια βήματα, αλλά χρησιμοποιήστε την ακόλουθη εντολή python3 -m http.server
Εναλλακτικά, αν απαιτείτε μια πιο ευέλικτη ρύθμιση και χρησιμοποιείτε ήδη το nodejs...
Εγκαταστήστε τον http-server
πληκτρολογώντας npm install -g http-server
.
Μεταβείτε στον κατάλογο εργασίας σας, όπου βρίσκεται το ome.html
.
Εκκινήστε τον http server σας με την εντολή http-server -c-1
.
Αυτό εκκινεί έναν Node.js httpd ο οποίος εξυπηρετεί τα αρχεία του καταλόγου σας ως στατικά αρχεία προσβάσιμα από το http://localhost:8080
.
Αν η γλώσσα που προτιμάτε είναι η Ruby ... οι θεοί της Ruby λένε ότι αυτό λειτουργεί επίσης:
ruby -run -e httpd . -p 8080
Φυσικά και η PHP έχει τη λύση της.
php -S localhost:8000
Έπεσα πάνω σε αυτό σήμερα.
Έγραψα κάποιο κώδικα που έμοιαζε με αυτό:
app.controller('ctrlr', function($scope, $http){
$http.get('localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
...αλλά θα έπρεπε να μοιάζει με αυτό:
app.controller('ctrlr', function($scope, $http){
$http.get('http://localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
Η μόνη διαφορά ήταν η έλλειψη του http://
στο δεύτερο κομμάτι κώδικα.
Απλά ήθελα να το βάλω εκεί έξω σε περίπτωση που υπάρχουν και άλλοι με παρόμοιο πρόβλημα.