Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2021, 00:46
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 04.04.2020
Сообщений: 60

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



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

и обработать его потом на php...
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2021, 08:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от 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)
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2021, 08:57
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Как то так

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)
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2021, 11:18
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2021, 11:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от nastya97core
Адресная строка меняется на
ser.loc/adm/?{"status":["В%20обработке","Принят"],"sort":"_created","countent":"0"}
Х/з как у вас там в ПХП... Но данные нужно передавать в некой переменной
ser.loc/adm/?data=<тут_твоя_JSON_строка>


На сервере, получив значение переменной data, обрабатываешь то значение как можешь...
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2021, 14:04
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 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}"


Разумеется распарсить я это никак не могу.
Ответить с цитированием
  #7 (permalink)  
Старый 16.06.2021, 15:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

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

Гугли как это делается в ПХП.
Ответить с цитированием
  #8 (permalink)  
Старый 16.06.2021, 15:09
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Вот нечто похожее на декодирование УРЛ в ПХП...
https://www.php.net/manual/ru/function.urldecode.php
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2021, 15:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

nastya97core,
appending-array
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2021, 19:06
Аватар для nastya97core
Аспирант
Отправить личное сообщение для nastya97core Посмотреть профиль Найти все сообщения от nastya97core
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Константный массив, как приватное поле класса AndreyMG Общие вопросы Javascript 1 13.05.2016 19:54
Как можно методом ajax вернуть ассоциативный массив js? Hurray AJAX и COMET 2 09.01.2016 00:19
Как преобразовать строку в объект axmed2004 Общие вопросы Javascript 4 20.11.2012 16:02
Как перевести json строку в js массив? Tek Общие вопросы Javascript 1 25.03.2012 17:11
Массив как часть параметра diprom Javascript под браузер 3 21.09.2011 00:08