web-dev-qa-db-fra.com

Les requêtes d'origine croisée ne sont prises en charge que pour HTTP

J'essaye de lancer ce code:

<!DOCTYPE html>
<html ng-app="myApp">
<head>
    <title>Exemple 06</title>
</head>
<body>
    <!-- Diretiva ng-repeat -->
    <div ng-controller="MyController">
        <a ng-href="#/">Page 1</a> | <a ng-href="#/p2">Page 2</a>
        <div ng-view="#/p2"></div>
    </div>

    <script src="js/angular.js"></script>
    <script src="js/angular-route.js"></script>
    <script type="text/javascript">
        var myApp = angular.module('myApp', ['ngRoute']);

        myApp.config(function($routeProvider){
            $routeProvider
                .when('/'  , {controller: 'MyController', templateUrl: 'p1.html'})
                .when('/p2', {controller: 'MyController', templateUrl: 'p2.html'})
                .otherwise({ redirectTo: '/'});
        });

        myApp.controller('MyController', function($scope){
            $scope.nomes = [
                {id: 1, nome: 'Arthur'},
                {id: 2, nome: 'Portos'},
                {id: 3, nome: 'Aramis'}
            ];
        });
    </script>
</body>

mais l'erreur ci-dessous se produit:

XMLHttpRequest ne peut pas charger le fichier: ///home/93579551515/Desktop/Angular/p1.html. Les demandes d'origine croisée ne sont prises en charge que pour HTTP. 

Je ne veux pas l'exécuter sur un serveur web.

10
Luciano Borges

Vous pouvez ajouter des modèles tels que p1.html et p2.html dans votre index.html en les plaçant dans des balises script, comme indiqué par dans la documentation .

<script type="text/ng-template" id="p1.html">
  This is the content of the template
</script>

Alors angular n'aura plus besoin de faire AJAX demandes pour les récupérer.

Notez que ces éléments script doivent apparaître after ng-app.

30
musically_ut

J'ai le même problème dans Chrome. Si vous utilisez Chrome, vous pouvez désactiver la même stratégie d'origine dans Chrome. À partir de l'exécution de Chrome:

$ google-chrome --disable-web-security

Voici plus de détails .

1
JulienBrks

Le fournisseur de route utilise le protocole http. Si vous exécutez ce code directement à partir d'un dossier, vous obtiendrez un problème d'origine croisée.

Conservez votre dossier sur un serveur tel que localhost/route et exécutez-le.

Fournissez un chemin de référence tel que templateUrl: '/p1.html'

0
Akhilesh Kumar