javascript - 无法从 URL 获取某些参数 - 返回 NaN/null
问题描述
我有这个简单的字符串:
var url_string = 'https://www.booking.com/searchresults.html?label=gen173nr-1DCAEoggJCAlhYSDNYBGjBAYgBAZgBMcIBCndpbmRvd3MgMTDIAQzYAQPoAQH4AQKSAgF5qAID;sid=2a2d61dc6122c8a17b369733693bc965;checkin_month=5&checkin_monthday=17&checkin_year=2018&checkout_month=6&checkout_monthday=1&checkout_year=2018&class_interval=1&dest_id=-90115&dest_type=city&dtdisc=0&from_sf=1&group_adults=3&group_children=0&inac=0&index_postcard=0&label_click=undef&no_rooms=1&offset=0&postcard=0&raw_dest_type=city&room1=A%2CA%2CA&sb_price_type=total&src=index&src_elem=sb&ss=Ni%C5%A1&ss_all=0&ssb=empty&sshis=0&ssne=Ni%C5%A1&ssne_untouched=Ni%C5%A1&'
我从中得到的
var url_string = window.location.href;
var url = new URL(url_string);
那是我目前所在的地址。现在我想提取一些参数
var no_rooms = url.searchParams.get("no_rooms"); // 1
var group_children = url.searchParams.get("group_children"); // 0
var checkin_month = url.searchParams.get("checkin_month"); // NaN
checkin_month
一个存在于字符串中的参数,它是一个数字,怎么可能打印出来NaN
?我在这里想念什么?
编辑:我用using替换;
了字符串中的?
url_string.replace(/;/g, "?");
并重复相同的过程,当我到达
var checkin_month = url.searchParams.get("checkin_month"); // I got null
EDIT2:?
当我应该替换为&
.
解决方案
由于 url 没有格式化,所以有两种方法。
解决方案1:
替换;
为&
使其成为查询参数。
var url_string = 'https://www.booking.com/searchresults.html?label=gen173nr-1DCAEoggJCAlhYSDNYBGjBAYgBAZgBMcIBCndpbmRvd3MgMTDIAQzYAQPoAQH4AQKSAgF5qAID;sid=2a2d61dc6122c8a17b369733693bc965;checkin_month=5&checkin_monthday=17&checkin_year=2018&checkout_month=6&checkout_monthday=1&checkout_year=2018&class_interval=1&dest_id=-90115&dest_type=city&dtdisc=0&from_sf=1&group_adults=3&group_children=0&inac=0&index_postcard=0&label_click=undef&no_rooms=1&offset=0&postcard=0&raw_dest_type=city&room1=A%2CA%2CA&sb_price_type=total&src=index&src_elem=sb&ss=Ni%C5%A1&ss_all=0&ssb=empty&sshis=0&ssne=Ni%C5%A1&ssne_untouched=Ni%C5%A1&'
var newUrlString = url_string.replace(/;/g, '&');
var url = new URL(newUrlString);
var checkin_month = url.searchParams.get("checkin_month");
console.log("checkin_month is " + checkin_month);
解决方案 2: 从现有 URL 对象解析字符串
var url_string = 'https://www.booking.com/searchresults.html?label=gen173nr-1DCAEoggJCAlhYSDNYBGjBAYgBAZgBMcIBCndpbmRvd3MgMTDIAQzYAQPoAQH4AQKSAgF5qAID;sid=2a2d61dc6122c8a17b369733693bc965;checkin_month=5&checkin_monthday=17&checkin_year=2018&checkout_month=6&checkout_monthday=1&checkout_year=2018&class_interval=1&dest_id=-90115&dest_type=city&dtdisc=0&from_sf=1&group_adults=3&group_children=0&inac=0&index_postcard=0&label_click=undef&no_rooms=1&offset=0&postcard=0&raw_dest_type=city&room1=A%2CA%2CA&sb_price_type=total&src=index&src_elem=sb&ss=Ni%C5%A1&ss_all=0&ssb=empty&sshis=0&ssne=Ni%C5%A1&ssne_untouched=Ni%C5%A1&'
var url = new URL(url_string);
var checkin_month = url.searchParams.get('label').split(';').find(e => e.includes('checkin_month')).split('=')[1]
console.log("checkin_month is " + checkin_month)
推荐阅读
- java - Hibernate 使用 java.sql.Date 错误吗?
- reactjs - 无法从用户输入数据更新反应状态
- android-linearlayout - 使用 Constraint Layout 开发 TV android Apps
- python - 最接近python中的虚拟调用
- xamarin.forms - Xamarin Forms 更新包
- plotly - 在 plotlyjs 中,如何在使用 RangeSlider 时在共享 yaxis 和独立 yaxis 之间切换
- c# - 如何使用 linq 从列表中创建子列表?
- java - Java Simple json不替换属性的值
- datepicker - 在 SwiftUI 中手动显示/隐藏 DatePicker 轮
- javascript - 在 React 中单击单选按钮时如何显示 div