2013-09-08 16 views
18

następujący wiersz kodu:angularjs nieoczekiwany znak w fromJson()

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

rzuca ten błąd:

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) 

Więc umieścić punkt przerwania na angularjs w wierszu 779. The Kod znajduje się:

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

wartość json jak przeszedł do JSON.parse() jest „mnp801fap6kor50trgv4cgk7 m2 ".

Zauważyłem również, że inne rzeczy, które trafiają do tej metody, zwykle zawierają dwie cytaty, na przykład "" nazwa użytkownika "".

Proszę o pomoc. Walę głową o to przez kilka godzin.

Lub, jeśli ktoś zna lepszy sposób na odzyskanie identyfikatora sesji php z ciasteczek za pomocą Angular, byłoby to również świetne. (Tak, mógłbym to zrobić za pomocą jQuery lub bare-metal JS, ale wolałbym nadal używać Angular).

Z góry dziękuję !!!

Odpowiedz

23

Nie wydaje się, że $cookieStore służy do odczytu plików cookie, które nie zostały utworzone przez $cookieStore. Z komentarzy:

* @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. 

Ważną częścią jest automatically serialized or deserialized. Udało mi się odtworzyć problemu tutaj: http://jsfiddle.net/xtmrC/

prawdopodobnie chcesz użyć $cookies zamiast, tak jak poniżej: http://jsfiddle.net/MXTY4/9/

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

Dzięki. Właściwie znalazłem odpowiedź na to pytanie kilka minut po opublikowaniu, ale nie mogłem opublikować odpowiedzi przez osiem godzin, ponieważ mój przedstawiciel nie jest wystarczająco wysoki. Ale dzięki za odpowiedź. Masz rację. Wygląda na to, że podczas dodawania czegoś do $ cookieStore, dodaje także dodatkowy zestaw "" wokół wartości. Więc, tak, możesz dostać tylko rzeczy z $ cookieStore, które umieściłeś sam. I używając $ cookies.PHPSESSID działało świetnie. – cutmancometh

+0

Ponadto, chciałbym przegłosować twoją odpowiedź, ale nie mogę, bo mój przedstawiciel nie jest wystarczająco wysoki. – cutmancometh

+0

Podniosłem zdanie. Może teraz możesz? Witamy w StackOverflow! – Langdon

0

Albo można po prostu zawinąć $ cookieStorage w funkcji i zwraca wartość lub pusty ciąg.

var sid = getPHPSESSID(); 

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

W takim przypadku będziesz korzystać z usługi kątowy z jego zalet, a jeśli nie umieścić parę klucz-wartość w ciasteczkach, dostaniesz pusty łańcuch w wyniku

Powiązane problemy