Как разобрать данные из url?
В url есть данные вида, это я уже отформатировал их, они могут быть без urlencode()
/botorder.php#tgWebAppData=user={
"id":185197,
"first_name":"Алекс",
"last_name":"Кова",
"language_code":"ru",
"allows_write_to_pm":true,
"photo_url":"https://ifKXEnhs.svg"}
&chat_instance=1059515225
&chat_type=supergroup
&auth_date=174688
&signature=vWpE4HWBw
&hash=d07177fab235f8
&tgWebAppVersion=9.0
&tgWebAppPlatform=ios
&tgWebAppThemeParams={
"section_separator_color":"#545458",
"bg_color":"#000000",
"bottom_bar_bg_color":"#1d1d1d",
"link_color":"#3e88f7",
"text_color":"#ffffff",
"accent_text_color":"#3e88f7",
"section_header_text_color":"#8d8e93",
"button_color":"#3e88f7",
"secondary_bg_color":"#000000",
"header_bg_color":"#1a1a1a",
"subtitle_text_color":"#98989e",
"hint_color":"#98989e",
"button_text_color":"#ffffff",
"section_bg_color":"#1c1c1d",
"destructive_text_color":"#eb5545"}
Как такие параметры можно разобрать?
Пробовал как обычно, но не получается
<input name="name2" id="name2" type="text" value="">
const url = new URL(window.location);
$('#name2').val(url.searchParams.get('first_name'));
Ответы (2 шт):
Автор решения: Alex Krass
→ Ссылка
Через самостоятельный парсинг hash составляющей URL, можно воспользоваться встроенными метода браузера для помощи в этом деле.
const url = new URL(`http://test.my?#tgWebAppData=user={
"id":185197,
"first_name":"Алекс",
"last_name":"Кова",
"language_code":"ru",
"allows_write_to_pm":true,
"photo_url":"https://ifKXEnhs.svg"}
&chat_instance=1059515225
&chat_type=supergroup
&auth_date=174688
&signature=vWpE4HWBw
&hash=d07177fab235f8
&tgWebAppVersion=9.0
&tgWebAppPlatform=ios
&tgWebAppThemeParams={
"section_separator_color":"#545458",
"bg_color":"#000000",
"bottom_bar_bg_color":"#1d1d1d",
"link_color":"#3e88f7",
"text_color":"#ffffff",
"accent_text_color":"#3e88f7",
"section_header_text_color":"#8d8e93",
"button_color":"#3e88f7",
"secondary_bg_color":"#000000",
"header_bg_color":"#1a1a1a",
"subtitle_text_color":"#98989e",
"hint_color":"#98989e",
"button_text_color":"#ffffff",
"section_bg_color":"#1c1c1d",
"destructive_text_color":"#eb5545"}`);
/* Парсинг с помощью URLSearchParams */
const params = new URLSearchParams(
url.hash.substring(1)
);
/* Получение параметра */
const tgData = params.get("tgWebAppData");
/* Если он сложный, можно еще раз прогнать в URLSearchParams */
const user = new URLSearchParams(params.get("tgWebAppData"))
/* Спарсить в JSON */
const userData = JSON.parse(user.get('user'))
console.log(userData)
Автор решения: Solt
→ Ссылка
Какой-то винегрет, а не параметры.
- Тут нет параметров вовсе, ибо параметры бывают после символа '?'. А тут - огромный хеш-тег.
- url.searchParams.get('first_name') не сработает, Даже если был бы символ '?', тут нет такого параметра. Есть параметр tgWebAppData, содержащий текст 'user={...}'. Чтоб его разобрать надо отрезать 'user=' а остальное - через JSON.parse
Лучше не мучаться с разбором такого запроса, а договориться с отправляющим, чтобы сделал однотипные данные - либо всё как положено - '?key=val&...&keyN=valN', либо, если нужен многомерный массив, всё одним параметром, содержащим JSON-текст