angularjs-$http get响应始终为[object]

b5lpy0ml  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(234)

我只是尝试从php获取一个键值对数组,并将响应发送回angularjs$http get请求:
php代码get_projects.php文件:

<?php
header('Content-Type: application/json');
$data = [{"id" => 1, "name" => 'Audi'}, {"id" => 2, "name" => 'BMW'}, {"id" => 3, "name" => 'Honda'}];
$encode = json_encode($data);
echo $encode;
?>

angularjs控制器代码:

app.controller('MainController', ['$scope', '$http', function ($scope, $http) {
    $scope.name = 'Search';
    $scope.projects = '';
     $http({
            method: 'GET',
            url: 'includes/get_projects.php',
            params: {}
         }).then(function success(response) {
            $scope.projects = response.data;
            alert($scope.projects);
     });
}]);

这个 alert($scope.projects); 总是回来 [object Object] . 这个 echo gettype($encode); 印刷品 string 但警报声明会打印出来 [object Object] . 我试过了 angular.fromJson() 但它还是会打印出来 [object Object] .
我对php中json_encode()函数的概念感到非常困惑。请帮我解决这个问题。

khbbv19g

khbbv19g1#

通过使用json将php数组序列化,将其转换为字符串。 $encode 因此是一个字符串,这很好。
您的前端现在会得到响应,并且(因为它与 application/json )已经将它从json字符串反序列化为javascript对象。
尝试将一个对象转换为字符串会给您带来类似的结果 [object Object] . alert 这不是合适的工具,因为它只能处理字符串。
尝试 console.log 取而代之的是检查devtools控制台输出,在那里您将看到一个可探索的对象(更好的是:在devtools调试器中,在成功处理程序中设置一个断点,并在该点检查对象。)
一句话:一切正常,只是你没有使用正确的方法来观察你的物体。

arknldoa

arknldoa2#

@cherrydt我想我解决了这个问题。

var make = [];
       for (var key in response.data) {
          if(response.data.hasOwnProperty(key)){
             make.push({
               "id": response.data[key].id,
               "name": response.data[key].name
             });
          }
        }
       $scope.projects = JSON.stringify(make);
       $scope.projects = angular.fromJson($scope.projects);

php使用json_encode将数组作为字符串发送。
angularjs response.data将响应作为对象。
循环遍历response.data对象,并将键/值推送到变量make。
使用创建字符串 JSON.stringify .
使用以下命令将json字符串转换为对象 angular.fromJson .
我看了几篇博客,其中分配了 response.data 对象直接指向$scope变量,但在我的例子中,它不起作用。
我使用的angularjs版本是:AngularJSV1.2.8

相关问题