JavaScript URL传值过程中遇到的问题及知识点总结
JavaScript URL传值过程中遇到的问题及知识点总结
Web系统开发过程中经常用到URL进行传值,刚刚接触时不太会解析,会出现中文乱码问题等。
1、父子页面之间的传值(在一个页面中以加载iframe框架的形式调出另一个页面)。
var URL=“XXXX..?code=aaa&name=liming&age=123”;
在子页面中进行解析时:
var href=window.location.href; //获取到当前的地址
然后以截取字符串的形式获取相应的参数值(截取字符串的方式适用于参数较少的情况,如果参数较多则不适合);
var code=href.substring(href.indexOf('=')+1,href.indexOf('&'));
.........一次类推获取所有参数。
2、由于URL编码规范中中文属于不合法字符,所以需要编码成合法的URL。
JavaScript中提供的全局函数:
顶层函数(全局函数)
| 函数 | 描述 |
|---|---|
| decodeURI() | 解码某个编码的 URI。 |
| decodeURIComponent() | 解码一个编码的 URI 组件。 |
| encodeURI() | 把字符串编码为 URI。 |
| encodeURIComponent() | 把字符串编码为 URI 组件。 |
| escape() | 对字符串进行编码。 |
| eval() | 计算 JavaScript 字符串,并把它作为脚本代码来执行。 |
| getClass() | 返回一个 JavaObject 的 JavaClass。 |
| isFinite() | 检查某个值是否为有穷大的数。 |
| isNaN() | 检查某个值是否是数字。 |
| Number() | 把对象的值转换为数字。 |
| parseFloat() | 解析一个字符串并返回一个浮点数。 |
| parseInt() | 解析一个字符串并返回一个整数。 |
| String() | 把对象的值转换为字符串。 |
| unescape() | 对由 escape() 编码的字符串进行解码。 |
例如:
var url="XXXXX..?code=111&name=晓明&age=123";
window.location.assign(encodeURL(url));
在另一个页面解析的时候为:
var href=decodeURL(location.href);
定义一个函数方便获取url中的参数
函数1:(当参数中没用中文的时候使用)
function getURLParameter(){
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var href = decodeURI(location.href);
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
函数2:(当参数中用中文的时候使用)
function getURLParameter(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var l = decodeURI(window.location.search);
var r = l.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
对应的知识点:
RegExp 对象
RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
语法:new RegExp(pattern, attributes);
·
参数
参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。ECMAScript 标准化之前,不支持 m 属性。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。
返回值
一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。
如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。
抛出
SyntaxError - 如果 pattern 不是合法的正则表达式,或 attributes 含有 "g"、"i" 和 "m" 之外的字符,抛出该异常。
TypeError - 如果 pattern 是 RegExp 对象,但没有省略 attributes 参数,抛出该异常。
Location 对象
Location 对象
Location 对象包含有关当前 URL 的信息。
Location 对象是 window 对象的一部分,可通过 window.Location 属性对其进行访问。
注意: 没有应用于Location对象的公开标准,不过所有浏览器都支持该对象。
Location 对象属性
| 属性 | 描述 |
|---|---|
| hash | 返回一个URL的锚部分 |
| host | 返回一个URL的主机名和端口 |
| hostname | 返回URL的主机名 |
| href | 返回完整的URL |
| pathname | 返回的URL路径名。 |
| port | 返回一个URL服务器使用的端口号 |
| protocol | 返回一个URL协议 |
| search | 返回一个URL的查询部分 |
Location 对象方法
| 方法 | 说明 |
|---|---|
| assign() | 载入一个新的文档 |
| reload() | 重新载入当前文档 |
| replace() | 用新的文档替换当前文档 |
JavaScript URL传值过程中遇到的问题及知识点总结的更多相关文章
- 解决url传递过程中加号变空格的问题
url传递过程中加号变空格 在接收url参数的过程中,会发现如果参数中存在‘+’号,接收后会变成空格. 如11+22接收后变成11 22. 要解决这个问题,需要将加号替换为%2B进行传递. 如11%2 ...
- 解决url传递过程中加号变空格的问题<转>
url传递过程中加号变空格在接收url参数的过程中,会发现如果参数中存在‘+’号,接收后会变成空格. 如11+22接收后变成11 22.要解决这个问题,需要将加号替换为%2B进行传递. 如11%2B2 ...
- [工具向]__关于androidstudio工具使用过程中学习到的一些知识点简记
前言 在我学习android开发课程的过程中,我们通常只会关注编程语言上面的一些知识点与问题,而忽略了开发工具的使用上的一些遇到的一些知识,其实每一款IDE工具都是集编程语言大成而开发出来的,其中有很 ...
- Canesten 项目申请ICP备案过程中遇到的问题及知识点扩充
遇到的问题:Canesten备案主体是Bayer *** Ltd., Shanghai Branch, 而提供的IP是 Bayer (China)limited,违背了电信要求的三一致原则,即备案主体 ...
- Struts2接受页面传值过程中出现input的问题
其实我在使用Struts2的时候,遇到要求返回input的时候不算少.一般我们在使用Struts2的时候,都会返回SUCCESS/ERROR,或者是NONE以到Strtuts的配置文件中再进行相应的处 ...
- Tomcat 使用过程中的一些技巧
url中文地址乱码 原因: tomcat默认的在url传输时是用iso8859-1编码. 解决方案一: 在使用get传输参数时,将参数中的中文转换成url格式,也就是使用urlEncode和urlDe ...
- JavaScript的执行过程(深入执行上下文、GO、AO、VO和VE等概念)
JavaScript的执行过程 前言 编写一段JavaScript代码,它是如何执行的呢?简单来说,JS引擎在执行JavaScript代码的过程中需要先解析再执行.那么在解析阶段JS引擎又会进行哪些操 ...
- 记录常见的问题:encodeURICompnent 解码过程中出现空格 以及 第三方app中使用schema 唤起app
window.location.href 跳转的时候使用了encodeURIComponent编码了部分参数,但是在第三方app中出现了编码过后的参数换行和空格的情况(部分第三方应用或者java程序) ...
- 从输入 URL 到浏览器接收的过程中发生了什么事情
从输入 URL 到浏览器接收的过程中发生了什么事情? 原文:http://www.codeceo.com/article/url-cpu-broswer.html 从触屏到 CPU 首先是「输入 U ...
随机推荐
- SQLServer 索引总结
测试案例: SET STATISTICS IO ON SET STATISTICS TIME ON SET STATISTICS PROFILE ON SELECT count(A.CarrierT ...
- 微信终端开发团队:新年新语言,WCDB Swift
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:sanhuazhang,此文发布在微信终端开发团队的专栏 WCDB 作为微信的终端数据库,从 2017.6 开源至今,共迭代了 5 个版本 ...
- 通过ArcMap发布服务
打开ArcMap,添加一个空地图 单击添加数据按钮 单击之后出现下图 点击 (连接到文件夹)按钮选择要添加的文件.添加之后如下. 保存为mxd文件 点击保存按钮就可以保存为mxd格式文件. 选择 Fi ...
- 记一次电信反射xss的挖掘与利用
0X0.前言 早上起床,打开手机习惯性刷刷新闻,却发现网络无法连接,本以为是光猫出现了问题,后来发现是忘记续费,欠费了. 在网上充值完之后,等了有将近十分钟,网依旧没恢复.随打了个电话给客服,客服在后 ...
- SQLAlchemy基础操作一
用前安装 pip3 install sqlalchemy ORM ORM就是运用面向对象的知识,将数据库中的每个表对应一个类,将数据库表中的记录对应一个类的对象.将复杂的sql语句转换成类和对象的操作 ...
- echart
先介绍echart: 官网: http://echarts.baidu.com 看名字就知道是百度出品的. ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC ...
- Django源码分析之程序执行入口分析
一般我们开启一个django项目,最简单的方法是进入project 目录,这时目录结构是这样的 然后我们执行python manage.py runserver,程序就开始执行了. 那django是如 ...
- 关于mybatis-generator的问题
1.运行完mybatis-generator没有出现问题,但是代码看不到,出现这种东西: 你需要使用相对路径,如项目名+/src/main/java,就可以解决了 2.附录我的代码以供参考: < ...
- Erlang内存吃紧之解决思路
首先使用erlang:memory()确定是哪个部分内存吃紧,根据输出的内容,比对内存占用大小,有针对性地进行分析.在erlang系统里内存的单位为word,通过erlang:system_info( ...
- <select>简易的二级联动
1.首先是表单页面: <tr> <td align="right"> <label class="Validform_label" ...