Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как массив преобразовать в get-образную строку? (https://javascript.ru/forum/misc/82693-kak-massiv-preobrazovat-v-get-obraznuyu-stroku.html)

nastya97core 15.06.2021 00:46

Как массив преобразовать в get-образную строку?
 
Здравствуйте. У меня на сайте есть фильтр, который работает без перезагрузки страницы. Мне хочется, чтобы в случае перезагрузки - данные формы сохранились. Я так поняла, мне нужно просто параллельно у пользователя менять его url с параметрами фильтра. В итоге я имею примерно вот такой массив:
{
filtr: "_created",
status: {"Принят", "Отклонён", "Завершён"},
limit: 8
}



Подскажите, как его преобразовать, чтобы потом сделать вот такое?
history.pushState(null, null, '/adm?'+array);

и обработать его потом на php...

ksa 15.06.2021 08:44

Цитата:

Сообщение от nastya97core (Сообщение 537953)
В итоге я имею примерно вот такой массив:
{
filtr: "_created",
status: {"Принят", "Отклонён", "Завершён"},
limit: 8
}

Это не массив... Это объект.
Еще он с ошибками.

Цитата:

Сообщение от nastya97core (Сообщение 537953)
Подскажите, как его преобразовать, чтобы потом сделать вот такое?
history.pushState(null, null, '/adm?'+array);

и обработать его потом на php...

Можно просто в строку

const obj = {
filtr: "_created",
status: ["Принят", "Отклонён", "Завершён"],
limit: 8
}
const str = JSON.stringify(obj)
alert(str)

voraa 15.06.2021 08:57

Как то так

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)

nastya97core 16.06.2021 11:18

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, он его даже не дал раздекодить

ksa 16.06.2021 11:33

Цитата:

Сообщение от nastya97core
Адресная строка меняется на
ser.loc/adm/?{"status":["В%20обработке","Принят"],"sort":"_created","countent":"0"}

Х/з как у вас там в ПХП... Но данные нужно передавать в некой переменной
ser.loc/adm/?data=<тут_твоя_JSON_строка>


На сервере, получив значение переменной data, обрабатываешь то значение как можешь...

nastya97core 16.06.2021 14:04

Цитата:

Сообщение от ksa (Сообщение 538009)
Х/з как у вас там в ПХП... Но данные нужно передавать в некой переменной
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}"


Разумеется распарсить я это никак не могу.

ksa 16.06.2021 15:05

Цитата:

Сообщение от nastya97core
я получаю кракозябры

Это уже на сервере, в ПХП?
Если полученный УРЛ не перекодирован "автоматически" - его нужно перекодировать самой... Иначе русские буквы такими и будут

Гугли как это делается в ПХП. ;)

ksa 16.06.2021 15:09

Вот нечто похожее на декодирование УРЛ в ПХП...
https://www.php.net/manual/ru/function.urldecode.php

рони 16.06.2021 15:16

nastya97core,
appending-array

nastya97core 16.06.2021 19:06

рони,
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...


Часовой пояс GMT +3, время: 15:12.