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 服务来调用后端:

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(){...})

但是php中的响应是一个对象而不是一个数组,所以这样我得到了一个javascript错误。我无法访问数组。哪里错了?

4

2 回答 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;
}
于 2015-11-01T15:05:32.520 回答
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;
        }
    };
});
于 2015-11-01T15:15:56.850 回答