15.06.2021, 00:46
|
|
Аспирант
|
|
Регистрация: 04.04.2020
Сообщений: 60
|
|
Как массив преобразовать в get-образную строку?
Здравствуйте. У меня на сайте есть фильтр, который работает без перезагрузки страницы. Мне хочется, чтобы в случае перезагрузки - данные формы сохранились. Я так поняла, мне нужно просто параллельно у пользователя менять его url с параметрами фильтра. В итоге я имею примерно вот такой массив:
{
filtr: "_created",
status: {"Принят", "Отклонён", "Завершён"},
limit: 8
}
Подскажите, как его преобразовать, чтобы потом сделать вот такое?
history.pushState(null, null, '/adm?'+array);
и обработать его потом на php...
|
|
15.06.2021, 08:44
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от nastya97core
|
В итоге я имею примерно вот такой массив:
{
filtr: "_created",
status: {"Принят", "Отклонён", "Завершён"},
limit: 8
}
|
Это не массив... Это объект.
Еще он с ошибками.
Сообщение от nastya97core
|
Подскажите, как его преобразовать, чтобы потом сделать вот такое?
history.pushState(null, null, '/adm?'+array);
и обработать его потом на php...
|
Можно просто в строку
const obj = {
filtr: "_created",
status: ["Принят", "Отклонён", "Завершён"],
limit: 8
}
const str = JSON.stringify(obj)
alert(str)
|
|
15.06.2021, 08:57
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Как то так
let sp = new URLSearchParams('');
let par = {
filtr: "_created",
status: ["Принят", "Отклонён", "Завершён"],
limit: 8
};
sp.append('filtr', par.filtr);
for (const ps of par.status) {
sp.append('status', ps);
}
sp.append('limit', par.limit);
let url = '/adm?' + sp.toString();
console.log(url);
// history.pushState(null, null, url)
|
|
16.06.2021, 11:18
|
|
Аспирант
|
|
Регистрация: 04.04.2020
Сообщений: 60
|
|
ksa,
Подскажите. У меня есть вот такой объект:
В js я делаю вот так:
history.pushState(null, null, '?'+JSON.stringify(res.post))
Адресная строка меняется на
ser.loc/adm/?{"status":["В%20обработке","Принят"],"sort":"_created","countent":"0"}
Потом я делаю в php print_r и получаю вот это:
Array
(
[{"status":] => Array
(
["В обработке","Принят"] =>
)
)
Что не так? Почему обрубается в php? Я не декожу $_GET, он его даже не дал раздекодить
Последний раз редактировалось nastya97core, 16.06.2021 в 11:21.
|
|
16.06.2021, 11:33
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от nastya97core
|
Адресная строка меняется на
ser.loc/adm/?{"status":["В%20обработке","Принят"],"sort":"_created","countent":"0"}
|
Х/з как у вас там в ПХП... Но данные нужно передавать в некой переменной
ser.loc/adm/?data=<тут_твоя_JSON_строка>
На сервере, получив значение переменной data, обрабатываешь то значение как можешь...
|
|
16.06.2021, 14:04
|
|
Аспирант
|
|
Регистрация: 04.04.2020
Сообщений: 60
|
|
Сообщение от ksa
|
Х/з как у вас там в ПХП... Но данные нужно передавать в некой переменной
ser.loc/adm/?data=<тут_твоя_JSON_строка>
На сервере, получив значение переменной data, обрабатываешь то значение как можешь...
|
блин. туплю на примитивных моментах. Спасибо!
Теперь снова проблема: я хочу разобрать эту же строку.
Я пытаюсь достать из него этот json, но на такой запрос:
strGET = window.location.search.replace( '?filtr=', '');
я получаю кракозябры:
"{%22status%22:[%22%D0%92%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5%22,%22%D0%9F%D1%80%D0%B8%D0%BD%D1%8F%D1%82%22],%22sort%22:%22_created%22,%22countent%22:%220%22}"
Разумеется распарсить я это никак не могу.
|
|
16.06.2021, 15:05
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от nastya97core
|
я получаю кракозябры
|
Это уже на сервере, в ПХП?
Если полученный УРЛ не перекодирован "автоматически" - его нужно перекодировать самой... Иначе русские буквы такими и будут
Гугли как это делается в ПХП.
|
|
16.06.2021, 15:09
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
|
|
16.06.2021, 15:16
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
|
|
16.06.2021, 19:06
|
|
Аспирант
|
|
Регистрация: 04.04.2020
Сообщений: 60
|
|
рони,
ksa,
Есть форма, её заполняют и она отправляется через Fetch formData.
Она отправляется на php и если результат положителен то она возвращает вместе с данными ещё и те данные сформированные formData в формате json.
Я их засовываю в URL
history.pushState(null, null, '?filtr='+JSON.stringify(res.post))
Проблема заключалась в том, что мне нужно по GET запросу заполнить форму (то есть восстановить значения до перезагрузки).
Короче говоря решение было вот в этой строке:
let objGet = JSON.parse(decodeURI(window.location.search.replace('?filtr=', ''))); // decodeURI()
Теперь ещё проблема. Как проверить, есть ли в window.location.search ?filtr= ? А то я пытаюсь распарить даже тогда, когда ничего в get нет и он ломает весь JS...
Последний раз редактировалось nastya97core, 16.06.2021 в 19:19.
|
|
|
|