Angular js $ http post avec laravel

Problème

Lorsque j'essaie de POSTER des données, j'ai une erreur. Bien sûr, je fais quelque chose de mal, je suis nouveau à l'angulaire. Quand je fais tout fonctionne bien, mais je ne suis pas sûr de faire POST.

Manette

myApp.controller('createListController', ['$scope', '$log', '$http', function($scope, $log, $http){ $http({ method: 'POST', url: 'http://localhost:8888/lists', data: $scope.name }) }]); 

HTML

 <form method="post" action="" > <label>List name</label> <input type="text" ng-model="name" name="name" class="form-control" placeholder="Type list name" /> <button type="submit" ng-model="submit" name="submit" class="btn btn-primary form-control">Add list</button> </form> 

Laravel rout.php

 Route::group(['middleware' => 'cors'], function () { Route::get('lists', 'ListsController@index'); Route::post('lists', 'ListsController@store'); }); 

Middleware Laravel

 class Cors { public function handle($request, Closure $next) { $response = $next($request); $response->headers->set('Access-Control-Allow-Origin', '*'); $response->headers->set( 'Access-Control-Allow-Headers', 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since' ); $response->headers->set('Access-Control-Allow-Credentials', 'true'); $response->headers->set('Access-Control-Allow-Methods', '*'); return $response; } } 

Laravel kernel.php

  protected $routeMiddleware = [ 'cors' => \App\Http\Middleware\Cors::class, ]; } 

Essayer de résoudre avec

 myApp.controller('createListController', ['$scope', '$log', '$http', function($scope, $log, $http){ if ($scope.submit == true){ $http({ method: 'POST', url: 'http://localhost:8888/lists', data: {name: 'text'} }) .success(function () { console.log('true'); }) .error(function(){ console.log('false'); }) } }]); 

Mais cela ne fonctionne pas non plus. Je ne sais pas ce que je fais mal et comment publier les données directement …

Message d'erreur

Erreur de la console: XMLHttpRequest ne peut pas charger localhost: 8888 / listes. Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origin 'localhost'; Est donc interdit d'accès.

Question

Comment puis-je résoudre cette erreur et obtenir un commentaire angulaire js $ http avec laravel?

Mon avis

Je pense qu'il y a quelque chose de mal dans le contrôleur angulaire, il ne peut pas obtenir des données de la forme ou quelque chose comme ça peut-être.

Solution

J'ai eu une solution par moi-même. Au 1er, mon contrôleur angulaire fonctionne correctement:

 myApp.controller('createListController', ['$scope', '$log', '$http', function($scope, $log, $http ){ $scope.addList = function () { var list = { name: $scope.listname }; $http({ method: 'POST', url: 'http://localhost/anydocopy/public/lists', data: list }) .success(function () { console.log('true'); }) .error(function(){ console.log('false'); }) } }]); 

Au 2ème, je définis le paramètre ng-model pour entrer le texte et le paramètre ng-click sur le bouton:

 <label>List name</label> <input type="text" ng-model="listname" class="form-control" placeholder="Type list name" /> <button type="submit" ng-click="addList()" name="submit" class="btn btn-primary form-control">Add list</button> 

Au 3ème avec la méthode POST, les domaines ne peuvent pas être différents (au moins en angulaire), donc je n'utilise pas localhost: 8888, mais j'utilise le chemin complet localhost / folder / … et cela a fonctionné pour moi. Maintenant, je peux POST des données de l'interface vers le backend.

Je n'ai jamais utilisé Laravel, mais vous devrez ajouter une demande OPTIONS à votre rout.php, pas seulement GET and POST.

Parce que vous dites que GET fonctionne, mais pas POST, je pense que c'est un problème avec les demandes simples et avant le vol. POST s'avère être une demande avant vol, car Angular utilise par défaut application/json comme type de données. De MDN à propos des demandes avant le vol:

Il utilise des méthodes autres que GET, HEAD ou POST. En outre, si POST est utilisé pour envoyer des données de demande avec un type de contenu autre que application / x-www-form-urlencoded, multipart / form-data, ou text / plain, par exemple si la demande POST envoie une charge utile XML au serveur En utilisant application / xml ou texte / xml, alors la demande est préfléchie.

Donc, soit transformer vos données POST pour être détecté, soit demander au serveur de répondre également aux demandes OPTIONS. Ce qui est mieux parce que vous aurez probablement besoin avant le vol pour une raison ou une autre.