Передача Json c AngularJS на PHP (Slim framework)

368
26 ноября 2016, 18:00

Нужно передать JSON с ангуляра, вот набросок кода:

mainApp.controller('NewsViewController', function($scope, $http) {
    $scope.getPosts = function(){
        var paramSearch = '{"name": "wiki", "field": ["name", "owner", "description"]}';    
$http.get('http://localhost:8088/api/rest.php/items/', paramSearch)
                .success(function(res, status, headers, config){
                    console.log(res.data);
                });
        };
    });

Принимаю код в PHP использую Slim framework

    $app->get('/items/', function (Request $request, Response $response) {
    //$file = 'log.txt';
    $input = $request->getQueryParams();
    //file_put_contents($file, $input) ;
    $sql = 'SELECT DISTINCT items.name, items.link, items.owner, items.date_start, items.date_end, items.description, format_file.format_name FROM items, format_file WHERE items.id_format_file = format_file.id';
   if (isset($input['name'])) {
            $sql = $sql . ' AND items.name LIKE "%' . $input['name'] . '%"';
    }
    $rows = DB::fetchAll($sql);
    $response->getBody()->write(json_encode([
        'data' => $rows
    ], JSON_UNESCAPED_UNICODE));
    return $response;
});

Делаю так, то $request->getQueryParams() возвращает пустоту, я так понимаю он предназначен для обычных параметров в ссылке

Answer 1

Для отправки параметров гет запросом с помощью AngularJS, параметры этого запроса нужно оборачивать в {params: 'тут данные в виде json объекта' }, должно выглядет так: $http.get('myUrl', {params: "мои параметры"})... пример:

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
    <script> 
        var app = angular.module('myApp', []); 
        app.controller('myCtrl', function ($scope, $http) { 
     
            $scope.getPosts = function () { 
                var paramSearch = {"name": "wiki", "field": ["name", "owner", "description"]}; 
     
                $http.get('http://localhost:8080/api/rest.php/items/', {params: paramSearch}) 
                        .success(function (res, status, headers, config) { 
                            console.log(res.data); 
                        }); 
            }; 
        }); 
    </script> 
</head> 
<body ng-app="myApp"> 
<div ng-controller="myCtrl"> 
  <button ng-click = "getPosts()"> Нажми меня</button> 
</div> 
</body> 
</html>

получается запрос такого вида: http://localhost:8080/api/rest.php/items/?field=name&field=owner&field=description&name=wiki

В браузере нажмите f12 -> network и посмотрите какие данные передаются.

Answer 2

Используйте POST запрос.

$http.post('http://localhost:8088/api/rest.php/items/', data).then(function (response) {
    console.log(response); 
}, function (response) {
    console.log(response);
});
Answer 3

Вы отправляете GET запрос, а нужно POST. Если хотите использовать GET то передавайте параметры в query string.

Пример: http://localhost:8088/api/rest.php/items/?foo=bar&foo2=bar2

READ ALSO
JavaScript: Array - возврат наименьшего и наибольшего значения из массива

JavaScript: Array - возврат наименьшего и наибольшего значения из массива

Есть код, который принимает массив и должен вернуть отсортированный массив из двух элементов, первый - это наименьшее, второй наибольшее...

293
Как работают замыкания в JavaScript

Как работают замыкания в JavaScript

Как сказал Альберт Эйнштейн:

277
Проблема с setInterval в JS

Проблема с setInterval в JS

Добрый вечер! Возникла проблема с решением задачиЕсть 9 блоков (массив mult от 0 до 8)

194
Догрузка JavaScrtipt и событие загрузки

Догрузка JavaScrtipt и событие загрузки

По определенном событию мне необходимо подгрузить дополнительный файл javascript и, после его загрузки и выполнения, выполнить некое действиеПо...

210