2013-09-08 16 views
18

Die folgende Codezeile:AngularJS unerwartetes Token in fromJson()

var sid = $cookieStore.get('PHPSESSID'); 

wirft diesen Fehler:

SyntaxError: Unexpected token m 
at Object.parse (native) 
at Object.fromJson (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:779:14) 
at Object.angular.module.factory.factory.get (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-cookies.js:149:34) 
at Object.getAllImages (https://7-september.com/photoslide/js/services.js:29:36) 
at new Management (https://7-september.com/photoslide/js/controllers.js:54:18) 
at invoke (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:2902:28) 
at Object.instantiate (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:2914:23) 
at $get (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:4805:24) 
at update (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:14198:26) 
at Object.$get.Scope.$broadcast (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8307:28) 

Also, habe ich einen Haltepunkt an Angularjs an der Linie 779. Die Code gibt es:

777 function fromJson(json) { 
778  return isString(json) 
779   ? JSON.parse(json) 
780   : json; 
781 } 

der Wert von json als bestanden in JSON.parse() ist „mnp801fap6kor50trgv4cgk7 m2 ".

Ich bemerkte auch, dass andere Dinge, die in diese Methode übergeben werden, normalerweise zwei Anführungszeichen um sie herum haben, wie zum Beispiel "" userName "".

Bitte helfen. Ich hämmere ein paar Stunden mit dem Kopf dagegen.

Oder, wenn jemand einen besseren Weg, um die PHP-Session-ID aus den Cookies mit Angular zu bekommen, das wäre auch toll. (Ja, ich könnte es mit jQuery oder Bare-Metal-JS, aber ich würde lieber mit Angular).

Vielen Dank im Voraus !!!

Antwort

23

Es scheint nicht, dass $cookieStore Cookies lesen soll, die nicht von $cookieStore erstellt wurden. Aus den Kommentaren:

* @description 
* Provides a key-value (string-object) storage, that is backed by session cookies. 
* Objects put or retrieved from this storage are automatically serialized or 
* deserialized by angular's toJson/fromJson. 

Die automatically serialized or deserialized ist der wichtige Teil. Ich war in der Lage, Ihr Problem hier zu reproduzieren: http://jsfiddle.net/xtmrC/

Sie wahrscheinlich $cookies statt wie so verwenden möchten: http://jsfiddle.net/MXTY4/9/

angular.module('myApp', ['ngCookies']); 
function CookieCtrl($scope, $cookies) { 
    console.log('haha', $cookies.PHPSESSID); 
} 
+1

Dank erhalten. Ich fand die Antwort auf diese Frage einige Minuten nachdem ich sie gepostet hatte, aber ich konnte die Antwort acht Stunden lang nicht posten, weil mein Ruf nicht hoch genug war. Aber danke für die Antwort. Du hast Recht. Es scheint, dass beim Hinzufügen von etwas in den $ cookieStore auch ein zusätzlicher Satz von "" um den Wert hinzugefügt wird. Also, yeah, du kannst nur Dinge aus dem $ cookieStore herausholen, die du selbst hast. Und mit $ cookies.PHPSESSID hat super funktioniert. – cutmancometh

+0

Außerdem würde ich deine Antwort auffrischen, aber ich kann nicht, weil mein Ruf nicht hoch genug ist. – cutmancometh

+0

Ich habe Ihre Frage upvoted .. vielleicht können Sie jetzt? Willkommen bei StackOverflow! – Langdon

0

Oder Sie können einfach wickeln Sie das $ cookieStorage in Funktion und geben einen Wert zurück oder eine leere Zeichenfolge.

var sid = getPHPSESSID(); 

function getPHPSESSID() { 
    return $cookieStore.get('PHPSESSID') || ''; 
} 

In diesem Fall werden Sie den Winkel Service nutzen damit Profis ist und wenn Sie nicht den Schlüssel-Wert-Paar in Cookies setzen Sie, werden Sie die leere Zeichenfolge in Folge