2016-09-14 8 views
1

Ich bin neu bei AngularJS, so dass mein Fehler irgendwo in meinem Code ist und ich ihn nicht finden kann. Ich verwende die Methode $HTTP GET, um Daten abzurufen, die sich auf einem Server/einer Seite befinden. Nach dem Abrufen dieser Daten (die JSON ist) möchte ich mit dieser Zeichenfolge spielen, um die Daten ordnungsgemäß abzurufen, wie name: number: und so weiter. Aber die Sache ist, sobald ich diese Daten in $scope.listOfCompanyUsers setze ich kann es nicht berühren. Wenn ich versuche, $scope.listOfCompanyUsers.slice(..) oder wenn ich versuche, eine andere String-Funktion für dieses Objekt meine gesamte Webseite abstürzt. I „alert()“ 'd die $scope.listOfCompanyUsers und das Ergebnis ist:

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

Was ich wollte, dass die Vor- und br-Tags aus dieser Zeichenfolge zu tun ist, zu entfernen, so habe ich einen reinen JSON-String, die ich mit spielen könnte, aber wieder jeden Funktion versuche ich auf $scope.listOfCompanyUsers stürzt meine Website ab. Was mache ich? Ich versuchte var someOtherVariable = $scope.listOfCompanyUsers, aber diese Variable funktioniert später nicht. Ich füge Teile meines Codes hinzu, weil mein Fehler woanders sein könnte.

Controller:

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

Später am selben Controller:

. 
. 
$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 
     } 
    }; 

jetzt mein Ziel ein var objectOfUsers haben = [{admin: true, id:123, username: "name", last_name: "test", name: "something"}, {next user.}, .] sondern weil ich nicht berühren kann die $scope.listOfCompanyUsers Ich stecke fest.

+0

Anstelle von 'alert ($ scope.listOfCompanyUsers); ', können Sie uns einen Screenshot des Ergebnisses von' console.log ($ scope.listOfCompanyUsers); '? – Cerbrus

+0

Es zeigt genau dasselbe, ich werde trotzdem eine SS anhängen. http://imgur.com/a/wQzGj –

+0

Ah, ich verstehe. Die Tags 'pre' und' br' sind tatsächlich Teil der Antwort ... Haben Sie Zugriff auf die serverseitige Seite des Anrufs? – Cerbrus

Antwort

1

das Problem ist, dass der Server einige zusätzliche Tags in die Antwort hinzufügen, die nicht da sein sollte:

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

Bearbeiten sie Ihre serverseitigen Code, zu entfernen: <pre> und </pre><br> .

Dann wird der Anruf funktionieren.

+1

Ja, tatsächlich ändern Sie den Code auf der Serverseite gearbeitet und jetzt $ scope.listOfCompanyUsers ist ein JSON-Objekt. I änderte einige Zeilen "self.response.write (

%s

% json.dumps (user_list, Gedankenstrich = 2))" auf „self.response.write (json.dumps (user_list, Gedankenstrich = 2)) wurde " –

+0

@LironIlayev: ja, das macht Sinn :-) Danke für die Annahme meiner Antwort! – Cerbrus

0

Ist Ihre Antwort eine Zeichenfolge? Wenn Ihre Antwort HTML-Tags hat, ist das kein gültiges JS-Objektformat. Es sieht so aus, als ob Sie ein Javascript-Array mit einem Objekt haben, das von einigen HTML-Tags umgeben ist.

Daher werden Sie nicht in der Lage sein, alles innerhalb dieser den Zugriff auf das Objektverweis Notation (.), bis es wie eine Zeichenfolge behandeln und verwenden String.prototype.replace und die Tags ersetzen, und dann eine JSON.parse auf die verbleibende Zeichenfolge tun zu konvertieren es in ein Objekt

+0

Ich habe eine Warnung (typeof $ scope.listOfCompanyUsers); und es sagt String –

0

Sehr seltsam Server-Antwort, so mögliche Lösungen sind:

  1. ändern Server-Antwort auf Standard JSON ohne unerwünschte <pre>
  2. Wenn Sie nicht Antwort nicht Teil der Reaktion unter Verwendung von regulären Ausdrücken in JS wollte ändern können entfernen. Beispiel Arbeiten, wie das tun:

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

In parsedGoodResonse Sie bezwecken die "berührt" werden kann, so genau das, was Sie brauchen.

+0

Ich würde einen einfachen ersetzen anstelle einer Regex verwenden. Viel zuverlässiger. – Cerbrus

+0

@Cerbrus dies in einer Zeile Regex zu tun wäre auch mit ersetzen. –

+0

Es wird keine Regex benötigt: 'var fixed = response.replace ('

', '').replace('

', '');' Dies sollte jedoch nicht clientseitig festgelegt werden. – Cerbrus

-1

Das Problem mit den zusätzlichen Tags ist nicht auf Ihrem Code, es ist auf der Server-Seite. Sie sollten den Code auf dem Server überprüfen und den Grund für diese zusätzlichen Tags finden. Sie können nicht dort sein, weil sie die Antwort zu einem ungültigen JSON machen.

+0

Angular analysiert den JSON automatisch. – Cerbrus

+0

Sie haben Recht. mein Fehler. Ich werde die Antwort bearbeiten –

Verwandte Themen