2013-09-08 15 views
18

La seguente riga di codice:AngularJS token imprevisto in fromJson()

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

sta gettando questo errore:

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) 

Così, ho messo un punto di interruzione angular.js alla linea 779. Il codice v'è:

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

Il valore di json come passò in JSON.parse() è "mnp801fap6kor50trgv4cgk7 m2" .

Ho anche notato che altre cose che vengono passate in quel metodo di solito hanno due virgolette intorno, come "" userName "" per esempio.

Per favore aiuto. Sto sbattendo la testa contro questo per un paio d'ore.

Oppure, se qualcuno conosce un modo migliore per estrarre l'id di sessione php dai cookie utilizzando Angular, sarebbe ottimo anche questo. (Sì, potrei farlo usando jQuery o JS bare metal, ma preferirei continuare ad usare Angular).

Grazie in anticipo !!!

risposta

23

Non sembra che $cookieStore sia inteso per leggere i cookie che non sono stati creati da $cookieStore. Dai commenti:

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

Il automatically serialized or deserialized è la parte importante. Sono stato in grado di riprodurre il problema qui: http://jsfiddle.net/xtmrC/

Probabilmente si desidera utilizzare $cookies invece, in questo modo: http://jsfiddle.net/MXTY4/9/

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

Grazie. In realtà ho trovato la risposta a questo alcuni minuti dopo averlo postato, ma non ho potuto postare la risposta per otto ore perché il mio rappresentante non è abbastanza alto. Ma grazie per la risposta. Hai ragione. Sembra che nel processo di aggiunta di qualcosa nel $ cookieStore, aggiunga anche un ulteriore set di "" attorno al valore. Quindi, sì, puoi solo ricavare da $ cookieStore che hai messo te stesso. ANd usando $ cookies.PHPSESSID ha funzionato alla grande. – cutmancometh

+0

Inoltre, altererei la tua risposta, ma non posso perché il mio rappresentante non è abbastanza alto. – cutmancometh

+0

Ho svalutato la tua domanda .. forse ora puoi? Benvenuto in StackOverflow! – Langdon

0

Oppure si può semplicemente avvolgere il $ cookieStorage in una funzione e restituire un valore o una stringa vuota.

var sid = getPHPSESSID(); 

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

In questo caso si userà il servizio angolare con i suoi pro e se non metti la coppia chiave-valore nei cookie, si otterrà il risultato stringa vuota in

Problemi correlati