Я работаю с 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. Я не могу получить доступ к массиву. Где не так?
Вам необходимо сериализовать свой массив в JSON перед отправкой клиенту:
public function getData(){
$response = new Response();
$response->code = Response::OK;
// Encode the response:
$response->body = json_encode(array("one","two"));
return $response;
}
Я думаю, что вы забыли данные кодирования, прежде чем вернуть его клиенту. На стороне сервера это должно быть:
$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;
}
};
});