Отправить Map() через Ajax

Как отправить коллекцию Map через Ajax ?

var arrMap = new Map([['test','value_1],['test2','value_2']])

$.ajax ... data: { datas: arrMap } ...

По итогу ничего не отправляется.

Proof

введите сюда описание изображения

введите сюда описание изображения


Ответы (1 шт):

Автор решения: teran

Формально говоря, в исходном виде - никак. Map не сериализуется (map ведь это не просто пары ключ значение, но и сохранение порядка ключей и типы ключа могут быть произвольны, а не только строка/число). У вас есть несколько вариантов решения проблемы:

  • Перед отправкой конвертировать map в обычный объект. Самый простой способ будет Object.fromEntries, но он пока что охватывает порядка 90% глобальных пользователей, поэтому возможно придется другими способами перебрать ключи словаря и сформировать объект.

  • Возможно, не стоит использовать Map изначально. Чаще всего для этих целей используют обычный объект, и тогда вопроса сериализации не будет. Ваш исходный массив легко преобразуется в объект с помощью arr.reduce((acc,v) => (acc[v[0]] = v[1], acc), {})

  • преобразовать map в массив массивов пар ключ-значение, подобный тому, как у вас в коде задано начальное значение при создании map. Реализация тоже не замысловатая, но на стороне пхп придется пересобирать обратно, что вряд ли целесообразно.

→ Ссылка