2016-01-11 6 views
0

Как получить параметры, переданные через запрос $ http.get с использованием PHP?

Это мой контроллер:

app.controller('phonesCtrl', function ($scope, $http, $routeParams) { 

    $scope.make = $routeParams.make; 
    console.log($routeParams); // Console displays 'Object {make: "apple"}' 
    console.log($scope.make); // Console displays 'apple' 

    $http({ 
     method: 'POST', 
     url: 'tools/get.php', 
     params: $routeParams, // Already an object: "{"make" : apple}" 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded' 
     } 
    }) 
    .then(function (response) { 
     $scope.phones = response.data; 
    }); 
}); 

Мой PHP попытка: работает с $ http.post, но что-то подсказывает мне, что я не могу использовать функцию file_get_contents сделать то же самое.

<?php 

$data = json_decode(file_get_contents("php://input")); 

var_dump($data); // Outputs NULL 
var_dump($_POST["make"]); // Outputs NULL 
var_dump($_POST); // Outputs empty array 

$con = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'root'); 

$stmt = $con->prepare("SELECT * FROM phones WHERE make = ?"); 
$stmt->bindParam(1, $make); 
$stmt->execute(); 

$result = json_encode($stmt->fetchAll(PDO::FETCH_ASSOC)); 

print_r($result); 

?> 

Я также использую $routeProvider службы, чтобы мои ссылки в чистоте. Сначала я понял, что консоль была выводить пустые объекты, поэтому я изменил мой конфиг, чтобы:

.when('/get/:make', { // Added /:make 
    templateUrl: 'tools/get.php', 
    controller: 'phonesCtrl' 
}) 

Так что теперь моя консоль выводит «яблоко», когда я перейти к/получить/яблоко.

+0

вы можете попытаться поместить объект javascript вместо строки в качестве параметра в $ http: var make = {make: $ routeParams.phone}; –

+0

никогда не пытайтесь сделать json вручную ... это склонно к ошибкам и намного проще позволить '$ http' сделать это за вас – charlietfl

+0

Почему вы спрашиваете о' file_get_contents'? Я предполагаю, что PHP сказал вам, что он ожидает в качестве первого параметра 'string' (имя файла), и вместо этого вы передаете' array' ('$ _GET'). Это не имеет смысла. BTW, как следует из названия, функция 'file_get_contents' возвращает вам содержимое файла, указанное в имени файла в первом параметре, как' string'. Но вы просто отправляете параметр GET, нет файлов вообще, зачем вы хотите использовать эту функцию? Вы уже получили параметр GET в виде строки в массиве '$ _GET'. –

ответ

0

Если вы читали PHP $ _POST документации here вы можете найти

Ассоциативный массив переменных, передаваемых текущему скрипту через метод HTTP POST при использовании применение/х-WWW-форм-urlencoded [ что вы используете] или multipart/form-data в качестве HTTP Content-Type в запросе.

Что вы пытаетесь сделать, так это передать запрос GET с параметрами POST. Вы эфиру передать его как этот www.yoursite.it/page.php?name=Matteo, а затем взять переменную с $name = $_GET['name'] или пройти на своем пути, но в POST так, как это:

$http({ 
method: 'POST', //CHANGE THIS FROM GET TO POST 
url: 'tools/get.php', 
params: { 
    name: 'Matteo' //USE PROPER JAVASRIPT OBJECTS 
}, 
headers: { 
    'Content-Type': 'application/x-www-form-urlencoded' 
} 
}) 

И тогда вы получите переменную с $name = $_POST['name']

+0

Я обновил вопрос, включив '$ routeProvider.config', и исправил URL-адрес, чтобы он включал' /: param'. Раньше я добавлял пустой объект.Я также попытался передать параметры как сообщение и получить их с помощью '$ _POST', и я также попытался передать параметры через url' tools/get.php? Make = apple' и попытался их извлечь, используя '$ _GET', и я все еще выдаю' NULL' или 'пустой массив'. Что я могу пропустить? – Bryner

+0

Можете ли вы обновить свой ответ с помощью нового кода? –

+0

Обновлено. – Bryner

0

В использовании PHP

$_GET["make"] 

Чтобы получить параметры.

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