请教一下关于URL中的查询字符串

https://www.baidu.com/?a=222

https://www.baidu.com/?a=333
这两个URL中的查询字符串不同,但访问的都是百度首页。

有两个问题请求大家帮忙解惑(我已经在网上查了,但是这方面的资料好像比较少,现在还是不懂):
第一个,请问一下,这个“查询字符串”应该怎么去理解?
第二个,为什么查不到某个东西(比如ajax中,用t= Math.random()来清除缓存,这个t每次都是随机小数),URL还能正常工作呢?
谢谢各位!

其实去学一点简单的后端知识就明白了……

作为前端只能简单答一下,不一定完全对,不过不会差太多……

  1. 一般在向服务器发起get请求的时候?后面的字符串会被解析为查询字符串,格式一般是?key=value&key2=value2,后端服务会解析这些字符串,转为一系列的值键对
    当然你用传统表单的get方法,使用默认行为也会向action的url发送?name=val的请求,这些应该来说是约定俗成的。

  2. 如前面所说url中?后面的字符串会被服务端路由解析为查询字符串,所以只要?之前的路径正确,就能解析到对应的路由上去。至于为什么会更新,应该是浏览器发现请求的url和之前的不相同,所以判断本地缓存的资源已经过时了,需要重新向服务器请求新的资源,这样就达到了刷新的效果。

查询字符串

url?name1=value&name2&value2

问号后面的就是查询字符串,格式就像上面那样,所有键值对需要用&分开

查询字符串有什么作用呢?举个栗子

比如 /getData 这个 URL 是可以拿到一个班的所有人信息。你想拿到这所有的信息,很简单,像下面这样就可以。

xhr.open('get', '/getData', true)
xhr.send(null)

但是,如果你想拿到这个班所有男生或者所有女生的数据,应该怎么做呢?

这就需要传递额外的信息给服务器,让服务器知道我们想要的数据是男生的还是女生的。查询字符串的作用就是这个,传递额外的信息给服务器。

xhr.open('get', '/getData?gender=male', true)
xhr.send(null)

然后我们在服务器就可以拿到这个额外的信息。至于用不用,怎么用,那就是后端的问题了。

// 下面写一段服务器的伪代码,方便大家理解

// request 就是请求
// query 就是解析好的查询字符串,它是一个对象,属性-值 就是 对应查询字符串的 键-值对

if (!!request.query.gender) {
  // 如果查询字符串没有指定 gender,就返回所有人的信息
}
if (request.query.gender === 'male') {
  // 如果查询字符串指定 gender 的值是 male,返回返回相应的数据
}
if (request.query.gender === 'female') {
  // 如果查询字符串指定 gender 的值是 female,返回返回相应的数据
}
  • 求助!,如何给bootstrap-table定义refresh回调函数
  • 这种卡片效果使用JavaScript+css3该怎么实现?
  • 正则怎么匹配两个@之间的内容?
  • 关于$.fn.init.prototype = $.fn的一些疑问
  • 初学javascript,将一个变量赋给另一个变量,是否是赋值了一个拷贝?
  • js 布尔值的问题
  • iframe 的资源和主页面的资源的请求顺序如何?
  • css3 帧动画 适合移动端吗?
  • 根据Url里不同的参数,加载不同的图片和css?
  • 正则表达式 w只匹配出一个字母,若要匹配出一个单词,怎么写?
  • vue-mint UI – icon在哪里有文档?