Подтвердить что ты не робот

Неопределенный токен AngularJS от Json()

Следующая строка кода:

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

выбрасывает эту ошибку:

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) 

Итак, я поставил точку останова в angular.js в строке 779. Код:

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

Значение json, переданное в JSON.parse(), равно "mnp801fap6kor50trgv4cgk7m2".

Я также заметил, что другие вещи, передаваемые в этот метод, обычно имеют две кавычки вокруг них, например "имя пользователя".

Пожалуйста, помогите. Я стучу головой об этом пару часов.

Или, если кто-то знает лучший способ получить идентификатор сеанса php из файлов cookie с помощью Angular, это тоже будет здорово. (Да, я мог бы сделать это с помощью jQuery или JSP, но я бы предпочел продолжать использовать Angular).

Спасибо заранее!

4b9b3361

Ответ 1

Похоже, что $cookieStore предназначен для чтения файлов cookie, которые не были созданы $cookieStore. Из комментариев:

* @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 toJson/fromJson.

automatically serialized or deserialized - важная часть. Я смог воспроизвести вашу проблему здесь: http://jsfiddle.net/xtmrC/

Скорее всего, вы захотите использовать $cookies, например: http://jsfiddle.net/MXTY4/9/

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

Ответ 2

Или вы можете просто обернуть $cookieStorage в функцию и вернуть значение или пустую строку.

var sid = getPHPSESSID();

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

В этом случае вы будете использовать службу angular с ее профи и если вы не поместите пару ключ-значение в файлы cookie, вы получите пустую строку в результате