Ресурс AngularJS $ не может десериализовать массив в объект

0

Я работаю с php Tonic и AngularJS. Поэтому у меня есть угловые, которые называют ресурсом отдыха. Код остального выглядит так:

/**
 * @method GET
 */
public function getData(){
    $response = new Response();
    $response->code = Response::OK;
    $response->body = array("one","two");
    return $response;
}

На бэкэнд код возвращает объект Response с массивом в теле. Из углового я использую $ resource service для вызова бэкэнда:

return {

    getBackData : function(){

        var call = $resource('/table_animation_back/comunication');

        call.get(function(data){
            console.log(data);
        });

    }

}

Результат console.log следующий:

Resource {0: "A", 1: "r", 2: "r", 3: "a", 4: "y", $promise: d, $resolved: true}0: "A"1: "r"2: "r"3: "a"4: "y"$promise: d$resolved: true__proto__: Resource

Я попытался использовать:

call.query(function(){...})

но Response in php - это объект, а не массив, поэтому я получил ошибку javascript. Я не могу получить доступ к массиву. Где не так?

Теги:
arrays
rest
tonic

2 ответа

1

Вам необходимо сериализовать свой массив в JSON перед отправкой клиенту:

public function getData(){
    $response = new Response();
    $response->code = Response::OK;
    // Encode the response:
    $response->body = json_encode(array("one","two"));
    return $response;
}
  • 0
    спасибо, это работает. Теперь я должен использовать call.query (), а не call.get (). Но разве нет способа отправить массив без использования json?
0

Я думаю, что вы забыли данные кодирования, прежде чем вернуть его клиенту. На стороне сервера это должно быть:

$response->body = json_encode(array("one","two"));
return $response;

В клиенте я думаю, что в этом случае мы должны использовать $q.defer. Например:

angular.module('YourApp').factory('Comunication', function($http, $q) {
    return {
        get: function(token){
            var deferred = $q.defer();
            var url = '/table_animation_back/comunication';
            $http({
                method: 'GET',
                url: url
            }).success(function(data) {
                deferred.resolve(data);
            }).error(deferred.reject);
            return deferred.promise;
        }
    };
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню