2016-06-07 5 views
0

Ich bin frustriert von AngularJS und Laravel 5.2.

Ich mag mit einer normalen $ HTTP POST-Anforderung tun:

APIservice.saveArticle = function (oArticle, callback) 
{ 
    var message = 'Hello World!'; 
    $http({ 
      method: 'POST', 
      url: sBaseUrl + '/api/dummy/', 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
      data: $.param({ 'message' : message }) 
    }); 
} 

Wenn ich jetzt versuchen, diesen Weg zu rufen in Postbote (POST + URL/api/admin) I unter dem Tab Headers kann sehen, dass Der Inhaltstyp ist text/html.

So bearbeitete ich das Modul config:

artikelportal.config(
[ 
    '$httpProvider', 
    function($httpProvider) 
    { 
     $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8'; 
    } 
]); 

Diese noch nicht funktionieren. Und mein Backend-Controller bekommt auch keine Daten:

Route::post('api/dummy', 
function (Request $request) 
{ 
    var_dump(json_decode(file_get_contents('php://input'), true)); // NULL 
    var_dump($_POST); // EMPTY 
} 
); 

Was mache ich falsch? Ich habe so viel probiert, aber ich habe nie funktioniert ... weiß jemand, was das Problem ist?

+0

Woher kommt die Nachricht? Meinst du oArticle? Ich würde vermeiden, jQuery so zu mischen, das ist wahrscheinlich das Problem. Versuchen Sie, Daten auf statisch zu setzen, um sicherzustellen, dass Sie zuerst Daten zurücksenden. – Brian

+0

@BrianS Ich habe so viele versucht und auch mit: http://kopy.io/qxAt8 Und Nachricht kommt aus einer Zeile über die $ http ({... – Gohan

+0

) Sie laufen PHP und eckig auf der gleichen Domäne oder anders Domain? –

Antwort

2

Postbote ist ein Rest-Client. Sie müssen den Anforderungsheader Content-type: application/x-www-form-urlencoded setzen, um eine Anfrage mit diesem Header an den Server zu senden. Wenn Sie in der Anfrage keine Kopfzeile setzen, sendet Postman die Standard-Kopfzeile Content-type: text/html. Dieses Beispiel funktioniert in meinem Standort.

Test-so.html

<!DOCTYPE html> 
<html ng-app="myApp"> 
    <head> 
     <title>Test Angular POST request</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
     <script src="app.js"></script> 
    </head> 
    <body ng-controller="testCtrl"> 
     <p>Press button and get response from the server</p> 
     <button ng-click="callServer()">Call</button> 
     <p><strong>Response:</strong></p> 
     <p>{{htmlResponse}}</p> 
    </body> 
</html> 

app.js

'use strict' 
var appModule = angular.module('myApp',[]).service('testService',['$http',function($http){ 
     this.getResponse = function(){ 
      return $http({ 
       url: "api-post.php", 
       method: "POST", 
       data: "p1=first_parameter&p2=second_parameter", 
       headers: {      
        "Content-Type": "application/x-www-form-urlencoded" 
       } 
      }); 
     } 
}]).controller('testCtrl',['$scope','testService',function($scope,testService){ 
    $scope.callServer = function(){ 
     testService.getResponse().then(function(response){ 
     $scope.htmlResponse = response.data; 
    }); 
    }; 

}]); 

api-post.php

<?php 
echo "This text come from the server. You sent to me this:"; 
print_r($_POST); 
?> 

Wenn Sie auf die Schaltfläche klicken das Ergebnis ist folgendes: enter image description here

Sie können die Anfrage und die Antwort im Chrome Inspector Tool im Bild sehen. Dieses Beispiel funktioniert in meiner lokalen Umgebung. Wenn Sie den Client und den Server in verschiedenen Domänen haben, gibt es Sicherheitsbeschränkungen (siehe CORS).