2016-09-14 21 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

你是對的。我的錯。我將編輯迴應 –