1:url实际应用简介

近期研究发现通过url传递参数很普遍的(淘宝也是这样做的),

通过修改url来传递参数,比如通过关键字搜索某件商品的时候,链接便追加了相应参数。在请求接口的时候直接对url进行解析就行了。我在实际应用中请求结构中page参数结构层级经常发生变化

例如淘宝男装页面是:https://www.taobao.com/markets/nanzhuang/index2016?spm=a219r.lm895.0.0.ADf1F1

当在搜索框中输入英伦时候则变成了以下链接

https://s.taobao.com/list?spm=a217m.8005144.302279.27.1OmJGz&q=%E8%8B%B1%E4%BC%A6&cat=50344007&style=grid&seller_type=taobao 

页面是根据链接来呈现的。通过对&q=%E8%8B%B1%E4%BC%A6&cat=50344007&style=grid&seller_type=taobao这几个参数进行解析,

构造出接口需要的数据,提交给接口。然后根据接口返回数据在页面展现出来。

这样的好处是,如果其他模块也用到参数的话,也可以来解析url中的参数  比如:页码,按照销量筛选,按照地址筛选。

2 url结构

在控制台输入location则出现下面结构:

hash     ""
host           "s.taobao.com"
hostname    "s.taobao.com"
href     "https://s.taobao.com/list?spm=a217m.8005144.302279.27.1OmJGz&q=%E8%8B%B1%E4%BC%A6&cat=50344007&style=grid&seller_type=taobao"
origin    "https://s.taobao.com"
pathname  "/list"
port      ""
protocol    "https:"
search    "?spm=a217m.8005144.302279.27.1OmJGz&q=%E8%8B%B1%E4%BC%A6&cat=50344007&style=grid&seller_type=taobao"

可以在控制台进行一一验证:如 window.location.origin

hash      设置或获取 href 属性中在井号“#”后面的分段。 
host      设置或获取 location 或 URL 的 hostname 和 port 号码。 
hostname    设置或获取 location 或 URL 的主机名称部分。 
href      设置或获取整个 URL 为字符串。 
pathname   设置或获取对象指定的文件名或路径。 
port      设置或获取与 URL 关联的端口号码。 
protocol    设置或获取 URL 的协议部分。 
search    设置或获取 href 属性中跟在问号后面的部分。

3:url操作

3-1 获取当前url完整地址

window.location

location

其他获取方法如下(此处内容参考http://www.jb51.net/article/47288.htm)

document.URL;
document.location;

top.location.href;

parent.document.location;

3-2  只获取hash 等属性则只需要在3-1后面加上相应属性

比如: window.location.origin

3-3 url转换成对象(预留)

   /**
* 分解URL中的参数到JS对象。<br/>
* 将JS对象组装为参数字符串方法参见{@link #queryString}<br/>
* 获得表单内所有元素提交参数字符串表示方法参见{@link #formQuery}
* @param {String} url
* @return {Object} 永远不会为空
*/
dequery: function (url) {
var param = {};
url = url.substr(url.indexOf('?') + 1);
if (url) {
url = url.split('&');
for (var i = 0, len = url.length; i < len; i++) {
var arr = url[i].split('=');
param[arr[0]] = decodeURIComponent(arr[1]);
}
}
return param;
},

3-4 对象转换成url

 /**
* 返回对象查询字符串表示形式.
* <pre><code>
var obj = {name:'Exiu', age:'25'}; //显示 name=Exiu&age=25
alert(queryString(obj));
// 也可以双重键值对形式
{"doAction":"interView","extra_params":{"interview_id":"27"}}
=> 'doAction=interView&extra_params['interview_id']=27'
* </code></pre>
* 提取url参数转为JS对象方法参见{@link #dequery}<br/>
* 获得表单内所有元素提交参数字符串表示方法参见{@link #formQuery}
* @param {Object} obj
* @return {String} 对象的查询字符串表示形式
*/
queryString: function (obj) {
if (!obj)
return '';
var arr = [];
for (var k in obj) {
var ov = obj[k], k = encodeURIComponent(k);
var type = typeof ov;
if (type === 'undefined') {
arr.push(k, "=&");
} else if (type != "function" && type != "object") {
arr.push(k, "=", encodeURIComponent(ov), "&");
} else if (ov instanceof Array) {
if (ov.length) {
for (var i = 0, len = ov.length; i < len; i++) {
arr.push(k, "=", encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&");
}
} else {
arr.push(k, "=&");
}
} else if (type === 'object') {
// 例如"extra_params":{"interview_id":"27"}形式
for (var kk in ov) {
arr.push(k, '[', kk, ']', '=', encodeURIComponent(ov[kk]), '&');
}
}
}
arr.pop();
return arr.join("");
}

3-4 url修改单个参数

3-5 url修改多个参数

我现在做的功能展示中需要  对分页,关键字,地区,商品分类,店铺类别,时间顺序,好评顺序 这个几个因素

根据实际场景构造数据请求借口

  //根据传入参数更改链接,如果链接中有page,应去掉page参数,
goUrl: function (name,value) {
var urlObj = Util.dequery(location.href); if(urlObj.page){
delete urlObj.page;
}
urlObj[name]=value;
var urlStr =Util.queryString(urlObj);
location.href = '?' + urlStr;
}

url操作一网打尽(一)的更多相关文章

  1. js原生的url操作函数,及使用方法。(附:下边还有jquery对url里的中文解码函数)

    js原生的url操作函数,完善的. /*****************************/ /* 动态修改url */ /*****************************/ var ...

  2. MT写的对URL操作的两个方法

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. jstl--->Core 核心标签库->URL操作

    jstl--->Core 核心标签库->URL操作 -->import.param.URL.redirect <c:import>将静态或动态文件包含至本身jsp页面 而 ...

  4. URL操作

    ThinkPHP 的 URL 操作.主要涉及到 URL 路径大小写.伪静态.生成以及模版中的 U()方法. 一.URL大小写 系统默认的规范是根据 URL 里面的模块名.控制器名来定位到具体的控制器类 ...

  5. [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. jQuery 工具类函数-URL操作函数

    调用名为$. param的工具函数,能使对象或数组按照key/value格式进行序列化编码,该编码后的值常用于向服务端发送URL请求,调用格式为: $. param (obj); 参数obj表示需要进 ...

  7. php 对url 操作类:url拼接、get获取页面、post获取页面(带传参)

    /* * @brief url封装类,将常用的url请求操作封装在一起 * */ class URL{ private $error; public function __construct(){ $ ...

  8. PHP 路径或URL操作

    echo 'documentroot:'.$_SERVER['DOCUMENT_ROOT'].'<br>'; //根目录,在apache的配置文件里定义:httpd.conf 比如:Doc ...

  9. 打开URL操作

    /* * 打开 url 的两种方法 */ public class OpenUrl { public static void main(String[] args) { String url = &q ...

随机推荐

  1. scala正则表达式

       正则表达式     Scala 通过 scala.util.matching 包种的 Regex 类来支持正则表达式 scala.util.matching.Regex.构造一个Regex对象, ...

  2. log4j2

    转载自 Blog of 天外的星星: http://www.cnblogs.com/leo-lsw/p/log4j2tutorial.html Log4j 2的好处就不和大家说了,如果你搜了2,说明你 ...

  3. 关于C++中的重定位

    "标准库定义了4个IO对象,处理输入时使用命名为cin的istream类型对象,这个对象也成为标准输入.处理输出时使用命名为cout的ostream类型对象,这个对象也称为标准输出.标准库还 ...

  4. 第一百一十一节,JavaScript,BOM浏览器对象模型

    JavaScript,BOM浏览器对象模型 学习要点: 1.window对象 2.location对象 3.history对象 BOM也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM ...

  5. 第九十节,html5+css3pc端固定布局,底部区域,说明区域,版权区域

    html5+css3pc端固定布局,底部区域,说明区域,版权区域 完成: HTML代码: <!--尾部--> <footer class="wei-bu"> ...

  6. PostgreSQL AS不忽略大小写

    select p.name as Name from person p; as后的Name会显示为name,若想不忽略大小写,请把Name加上双引号 select p.name as "Na ...

  7. 一行一行分析JQ源码学习笔记-01

    jQuery (function(window,undefined){ }) undefined 防止外部参数中 var  undefined =10:以此来改变内部 undefined 不太建议用严 ...

  8. hdu_5831_Rikka with Parenthesis II(模拟)

    题目链接:hdu_5831_Rikka with Parenthesis II 题意: 给你一些括号的排列,必须交换一次,能不能将全部的括号匹配 题解: 模拟一下括号的匹配就行了,注意要特判只有一对括 ...

  9. tomcat 配置SSL

    本教程使用 JDK 6 和 Tomcat 7,其他版本类似. 基本步骤: 使用 java 创建一个 keystore 文件 配置 Tomcat 以使用该 keystore 文件 测试 配置应用以便使用 ...

  10. deb

    1.APT方式 (1)普通安装:apt-get install softname1 softname2 …; (2)修复安装:apt-get -f install softname1 softname ...