Передайте объект javascript через запрос POST [дубликат]

Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.

Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.

30
задан Stewart Johnson 31 August 2010 в 12:30
поделиться

4 ответа

В общем, нет пути (в браузере), поэтому сериализуйте объекты с прикрепленными к ним функциями, поскольку каждая функция имеет ссылку на внешнюю область. Если функция ссылается на любую из этих переменных, они больше не будут существовать при десериализации.

Что бы я хотел использовать встроенные (или json2.js) JSON.stringify и JSON.parse функции с параметрами replacer и reviver. Вот частичный пример того, как он будет работать:

JSON.stringify(yourObject, function(name, value) {
    if (value instanceof LatLng) { // Could also check the name if you want
        return 'LatLng(' + value.lat() + ',' + value.lng() + ')';
    }
    else if (...) {
        // Some other type that needs custom serialization
    }
    else {
        return value;
    }
});

JSON.parse(jsonString, function(name, value) {
    if (/^LatLng\(/.test(value)) { // Checking the name would be safer
        var match = /LatLng\(([^,]+),([^,]+)\)/.exec(value);
        return new LatLng(match[1], match[2]);
    }
    else if (...) {
        ...
    }
    else {
        return value;
    }
});

Вы можете использовать любой формат сериализации, который вы хотите, в своих пользовательских типах. Формат LatLng (широта, долгота) - это всего лишь один из способов сделать это. Вы даже можете вернуть объект javascript, который может быть сериализован в JSON изначально.

26
ответ дан Matthew Crumley 31 August 2018 в 13:37
поделиться

использовать gserializer :

http://www.onegeek.com.au/articles/programming/javascript-serialization.php

код в google:

http://code.google.com/p/gserializer/

GSerializer является javascript-библиотеку для сериализации / десериализации javascript-объектов в строки и из строк, для сохранения, например, в Cookie. В отличие от многих других реализаций, GSerializer может также сериализовать функции и нотацию без JSON.

7
ответ дан Haim Evgi 31 August 2018 в 13:37
поделиться

Я бы не стал сериализовать функции JS из соображений безопасности. Через открытый API всевозможные неприятные вещи могут быть отправлены в базу данных. Что касается десериализации, у меня другой подход. Я смешиваю объекты модели, определенные на стороне клиента, с данными, поступающими от JSON. У меня есть небольшой инструмент для этого, посмотрите на GitHub в khayll / jsonmix .

JsonMix предоставляет своего рода десериализацию от JSON в JavaScript Object complete с функциями.

Это будет выглядеть как-то:

//model definition (just an example)

var LatLng = function() {}
LatLng.prototype.getMapTypeId = function() {
   return this.mapTypeId;
}

//deserializing done like this
var result = JSMix(jsonString).withObject(LatLng.prototype, "latLngs").build();

//all items in the latLngs collection have the functions coming from the model
console.log(result.latLngs[5].getMapTypeId());
1
ответ дан kenorb 31 August 2018 в 13:37
поделиться

Вы не хотите сериализовать логику, такую ​​как функции.

Если вам нужно обновить свои функции логики / js в будущем, вы не всегда хотите всегда загружать старую логику назад с данными необходимо. Осторожно.

10
ответ дан lknox 31 August 2018 в 13:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: