2016-11-22 3 views
1

Я следующий сценарий, у меня есть Угловая переменная называется contact, который является объектом JSON, который имеет следующие элементы:

  • Сообщение
  • Имя
  • Телефон
  • Email

Я console.log(contact) и регистрирует правильную информацию, однако, как только посланный, $_POST['contact'] приводит к пустому массиву. Я читал и обнаружил, что $_POST['contact'] не будет заполнен так, как если бы это был HTTP-запрос от jQuery. Так что я установил его к следующему:

$params = json_decode(file_get_contents('php://input'),true); 
print_r($params); 

А вот Угловая функция:

$scope.submitForm = function(contact){ 
     console.log(contact); 
     $scope.clearContactFormData(); 
     return $http.post('http://localhost/cpr_courses/app/methods/contact.php', contact).success(function(data){ 
      Materialize.toast(data, 4000); 
     }); 
    } 

Еще print_r($params) пуста. Я понятия не имею, что еще происходит. Любая помощь, пожалуйста?

EDIT

console.log() выводит следующее:

Array[0] 
email 
: 
"[email protected]" 
length 
: 
0 
message 
: 
"rubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOBrubAWREIUVBAERWOBNATEIOB" 
name 
: 
"rubAWREIUVBAERWOBNATEIOB" 
phone 
: 
"13345678" 

и вот вкладка сети изображение:

response headers

Вот декларация объекта JSON:

$scope.contact = {}; 
$scope.onlyNumbers = /^[0-9]+$/; 

Это позже надеть на форму, как это:

<form method="post" class="form-sl" role="form" name="contactForm" ng-submit="submitForm(contact)" novalidate enctype="multipart/form-data"> 

и позже, на каждом поле, как это:

<input type="email" name="email" id="email" ng-model="contact.email" autocomplete="off" ng-maxlength="50" length="50" required/> 

Это нормально?

+0

Посмотрите на сетевой инспектор вашего браузера, каков фактический необработанный HTTP-запрос. Он не имеет ничего общего с jQuery или Angular, PHP не знает и не заботится о том, кто отправил запрос. Важен формат запроса и то, как PHP обрабатывает разные форматы. – deceze

+0

Как точно выглядит вывод console.log (контакт)? –

+0

Проверьте, что браузер отправляет на вашу сетевую вкладку, и убедитесь, что это так, как вы думаете, и что это действительно json.После того, как вы подтвердили это, echo 'file_get_contents ('php: // input')' в php (без json_decode) и посмотреть, что php получает. – Alcinator

ответ

2

The $_POST superglobal является товаром PHP для автоматического декодирования тела типичного запроса POST, отправленного форматами HTML. Другими словами, он ожидает, что один из этих значений в заголовке Content-Type запроса:

  • application/x-www-form-urlencoded
  • multipart/form-data

Поскольку у вас есть application/json, он остается пустым.

+0

Как я могу это исправить? – codeninja

+0

@codeninja Вам необходимо настроить формат данных для клиентов и серверов. Я понятия не имею, какой из них вам нужен, и если это проблема углов, это не моя область знаний. –

Смежные вопросы