$ scope.someVariable无法触及

时间:2016-09-14 12:28:42

标签: javascript html angularjs json

我是AngularJS的新手,所以我的错误可能出现在我的代码中,我无法找到它。我使用$HTTP GET方法检索位于某个服务器/页面中的数据。检索完该数据(即JSON)之后,我想使用该字符串来正确检索数据,例如name:number:等等。但事情是,一旦我将这些数据放入$scope.listOfCompanyUsers我无法触及它。如果我尝试$scope.listOfCompanyUsers.slice(..)或者如果我在该对象上尝试任何其他字符串函数,我的整个网页都会崩溃。我{" alert()"' $scope.listOfCompanyUsers,结果是:

<pre>[
  {
    "admin": true, 
    "id": 123, 
    "username": "someName", 
    "last_name": "someLastName", 
    "name": "John Doe"
  }
]</pre><br>

我想要做的是从该字符串中删除pre和br标签,这样我就可以使用一个纯JSON字符串,但我再次使用$scope.listOfCompanyUsers上的任何函数都会崩溃我的网站。我该怎么办?我尝试了var someOtherVariable = $scope.listOfCompanyUsers,但该变量以后没有用。我添加了部分代码,因为我的错误可能在其他地方。

控制器:

$http({
        method: 'GET',
        url: '/someURL'
    }).then(function successCallback(response) {
            $scope.listOfCompanyUsers = response.data;
        },
        function errorCallback(response) {
            alert(response.status);
        });

稍后在同一个控制器上:

.
.
$scope.someFunction = function () {
        .
        .
        else {
            alert("Maximum of 9 other passengers!");
            alert($scope.listOfCompanyUsers);
            // In this alert I could see the $scope.listOfCompanyUsers as mentioned above
        }
    };

我现在的目标是拥有一个var objectOfUsers = [{admin: true, id:123, username: "name", last_name: "test", name: "something"}, {next user.}, .],但因为我无法触及$scope.listOfCompanyUsers我被卡住了。

4 个答案:

答案 0 :(得分:1)

问题是服务器正在为不应该在那里的响应添加一些额外的标签:

<pre>[
  {
    "admin": true, 
    "id": 123, 
    "username": "someName", 
    "last_name": "someLastName", 
    "name": "John Doe"
  }
]</pre><br>

修改服务器端代码,删除:<pre></pre><br>

然后通话即可。

答案 1 :(得分:0)

您的回复是字符串吗?如果您的响应有HTML标记,那么这是无效的JS对象格式。看起来你有一个带有一个对象的Javascript数组,被一些HTML标签包围。

因此,您将无法使用对象引用表示法(String.prototype.replace)访问其中的任何内容,直到您将其视为字符串并使用JSON.parse并替换标记,然后执行剩余字符串上的{{1}}将其转换为对象

答案 2 :(得分:0)

非常奇怪的服务器响应,所以可能的解决方案是:

  1. 将服务器响应更改为标准JSON而不需要<pre>
  2. 如果您无法更改响应,请使用JS中的正则表达式删除不需要的部分响应。工作示例如何做到:
  3. &#13;
    &#13;
    var response='<pre>[{"admin": true, "id": 123, "username": "someName","last_name": "someLastName", "name": "John Doe"}]</pre><br>';
    
    var goodResponse=response.match(/>([^<]*)</)[1];//remove not wanted signs
    var parsedGoodResonse=JSON.parse(goodResponse);
    console.log(parsedGoodResonse);//here we have parse js array
    &#13;
    &#13;
    &#13;

    parsedGoodResonse中你有一个可以触及的对象&#34;正是你所需要的。

答案 3 :(得分:-1)

额外标签的问题不在您的代码上,而是在服务器端。您应该检查服务器上的代码并找到这些额外标签的原因。它们不能存在,因为它们使响应成为无效的JSON。