2016-09-14 22 views
1

我是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> 

我想要做的是从字符串删除前和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 
     } 
    }; 

我的目标,现在是有一个变种objectOfUsers = [{admin: true, id:123, username: "name", last_name: "test", name: "something"}, {next user.}, .],但因为我不能碰$scope.listOfCompanyUsers我被卡住了。

+0

而不是'alert($ scope.listOfCompanyUsers);',你能提供一个关于'console.log($ scope.listOfCompanyUsers)的结果的屏幕截图吗? – Cerbrus

+0

它显示完全一样,无论如何我会附上一个SS。 http://imgur.com/a/wQzGj –

+0

啊,我明白了。 'pre'和'br'标签实际上是响应的一部分......您是否可以访问该通话的服务器端? – Cerbrus

回答

1

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

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

编辑您的服务器端代码,删除:<pre></pre><br>

然后这个呼叫就会起作用。

+1

是的,实际上改变了服务器端工作的代码,现在$ scope.listOfCompanyUsers是一个json对象。 (self.response.write(

%s

%json.dumps(user_list,indent = 2))“ ”self.response.write(json.dumps(user_list,indent = 2)) “ –

+0

@LironIlayev:是的,这是有道理的:-)感谢您接受我的答案! – Cerbrus

0

您的回答是一个字符串吗?如果你的回应有HTML标签,那么这是不合法的JS对象格式。它看起来像你有一个Javascript数组与一个对象,由一些HTML标签封闭。

因此,您将无法使用对象引用标记(.),直到你把它在这个访问任何类似的字符串,并使用String.prototype.replace并更换标签,然后做一个JSON.parse上剩余的字符串转换到一个对象

+0

我把警报(typeof $ scope.listOfCompanyUsers);它说字符串 –

0

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

  1. 更改服务器响应标准JSON没有令人不快的<pre>
  2. 如果你不能改变在JS使用正则表达式响应取出未想回应的一部分。工作示例如何做到这一点:

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

parsedGoodResonse你有对象,它可以被“感动”,所以,正是你需要的。

+0

我会用一个简单的替换,而不是一个正则表达式。更可靠。 – Cerbrus

+0

@Cerbrus在一行中执行此操作正则表达式也需要替换。 –

+0

不需要正则表达式:'var fixed = response.replace('

', '').replace('

','');'也就是说,这不应该是固定的客户端。 – Cerbrus

-1

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

+0

Angular自动分析JSON。 – Cerbrus

+0

你是对的。我的错。我将编辑回应 –