2014-09-24 2 views
0

마지막으로 답을 찾으려고 노력한 후 $ http POST가 작동했습니다. 왜 두 개의 AngularJS $ http POST 요청에 대해 서로 다른 두 세트의 PHP 코드를 사용해야 만하는지 알고 싶습니다.

ContactsControllers.factory('messageFactory', ['$http', function($http){ 
 
\t return { 
 
\t \t sendMessage: function(message,contactIdArray){ 
 
\t \t \t return $http.post('/php/sendMessage.php', {message:message,contactIdArray:contactIdArray}); 
 
\t \t \t } 
 
\t \t }; 
 
}]); 
 

 
ContactsControllers.factory('messagesFactory', ['$http', function($http){ 
 
\t return { 
 
\t \t getContactMessages: function(contactid){ 
 
\t \t \t var config = { 
 
\t \t \t \t params: { 
 
\t \t \t \t \t contactid: contactid 
 
\t \t \t \t } \t 
 
\t \t \t }; 
 
\t \t \t return $http.post('/php/getMessages.php',null,config); 
 
\t \t } 
 
\t }; 
 
}]);

내 두 PHP 코드 세트 : 이 내 AngularJS와 $ HTTP POST 요청입니다

$data = file_get_contents("php://input"); 
 
$data = json_decode($data, TRUE); 
 
$thisMessage = $data['message']; 
 
$contactIdArray = $data['contactIdArray'];
if($_SERVER["REQUEST_METHOD"] === "POST") 
 
{ 
 
\t if(isset($_GET["contactid"])) 
 
\t { 
 
\t \t $contactid = json_decode($_GET["contactid"]); 
 
\t } 
 
\t else{ 
 
\t \t $result = "no contact id"; 
 
\t } 
 
\t echo json_encode($contactid); 
 
}

누군가가 말해 줄 수 있다면 내가 왜 그냥 수 내 'messagesFactory'$ http POST 요청에 대한 angularJS 및 PHP 코드의 첫 번째 세트를 사용하면이 점을 좀 더 잘 이해할 수 있습니다. 다른 코드를 시험해 본지 며칠이 지난 후에 내가 마침내 작동하는이 http://www.angularjshub.com/examples/forms/formsubmission/을 발견했습니다.

답변

0

file_get_contents("php://input")은 POST 데이터에만 액세스 할 수 있습니다. 따라서 쿼리 문자열 데이터 (GET)에 액세스하는 데 사용할 수 없으며 양식에 enctype="multipart/form-data"을 포함하면 POST 데이터에 대한 액세스가 허용되지 않습니다.

첫 번째 PHP 스크립트가 작동하는 이유는 사용자가 요청한 데이터가 POST 변수이기 때문입니다.

데이터가 URL에있는 두 번째 요청에 대해 첫 번째 PHP 스크립트가 작동하지 않는 이유는 file_get_contents("php://input")이 GET 데이터에 액세스 할 수 없기 때문입니다.

당신이 사용할 수있는 솔루션은 $ http에서 POST 대신 실제 GET 요청을 구현하고 $ http를 사용하여 POST하지 않고 모든 데이터를 보내거나 다른 방법으로 데이터를 잡아내는 것입니다. 귀하의 PHP 스크립트.