js的urlsearchparamss 怎么兼容

js获取url的参数和值的N种有效方法 - 快乐每一天 - ITeye博客
博客分类:
function getParameterByName(name)
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.search);
if(results == null)
return "";
return decodeURIComponent(results[1].replace(/\+/g, " "));
var urlParams = {};
(function () {
var match,
// Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
= window.location.search.substring(1);
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)')
.exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
var qs = (function(a) {
if (a == "") return {};
var b = {};
for (var i = 0; i & a. ++i)
var p=a[i].split('=');
if (p.length != 2)
b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
})(window.location.search.substr(1).split('&'));
Google method
function (b) {
var c = typeof b === "undefined";
if (a !== h && c)
for (var d = {}, b = b || k[B][vb], e = b[p]("?"), f = b[p]("#"), b = (f === -1 ? b[Ya](e + 1) : [b[Ya](e + 1, f - e - 1), "&", b[Ya](f + 1)][K](""))[z]("&"), e = i.dd ? ia : unescape, f = 0, g = b[w]; f & ++f) {
var l = b[f][p]("=");
if (l !== -1) {
var q = b[f][I](0, l),
l = b[f][I](l + 1),
l = l[Ca](/\+/g, " ");
d[q] = e(l)
} catch (A) {}
c && (a = d);
(function($) {
$.QueryString = (function(a) {
if (a == "") return {};
var b = {};
for (var i = 0; i & a. ++i)
var p=a[i].split('=');
if (p.length != 2)
b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
})(window.location.search.substr(1).split('&'))
})(jQuery);
$.urlParam = function(name){
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (!results)
return results[1] || 0;
var getParamValue = (function() {
var params,
resetParams = function() {
var query = window.location.search,
regex = /[?&;](.+?)=([^&;]+)/g,
params = {};
if (query) {
while (match = regex.exec(query)) {
params[match[1]] = decodeURIComponent(match[2]);
window.addEventListener
&& window.addEventListener('popstate', function() {
resetParams();
resetParams();
return function(param) {
return params.hasOwnProperty(param) ? params[param] :
// The plugin jQuery-URL-Parser
$.url.param("itemID")
;(function ($) {
$.extend({
getQueryString: function (name) {
function parseParams() {
var params = {},
a = /\+/g,
// Regex for replacing addition symbol with a space
r = /([^&=]+)=?([^&]*)/g,
d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
q = window.location.search.substring(1);
while (e = r.exec(q))
params[d(e[1])] = d(e[2]);
if (!this.queryStringParams)
this.queryStringParams = parseParams();
return this.queryStringParams[name];
})(jQuery);
var someVar = $.getQueryString('myParam');
var data = URI('?foo=bar&bar=baz&foo=world').query(true);
"foo": ["bar", "world"],
"bar": "baz"
function getUrlParams() {
var result = {};
var params = (window.location.search.split('?')[1] || '').split('&');
for(var param in params) {
if (params.hasOwnProperty(param)) {
paramParts = params[param].split('=');
result[paramParts[0]] = decodeURIComponent(paramParts[1] || "");
浏览 15758
浏览: 2499257 次
来自: 上海
刚开始以为被黑客盯上了呢,太坑了,谢谢博主。
真是太坑爹了
dragonhunter 写道你就是个2bInteger.pa ...
不错呀。。。。。。。。。。。。。。java+axios.js
使用vue有一段时间了,下面是我在Java环境下使用vue+axios的时候遇到的一个坑,在这分享给大家,如有不正确或者疑惑的地方可以@我。
邮箱地址:wangpan_
1.在使用异步请求后台时,由于官方不在更新vue-resource,推荐使用axios,因此在使用的时候难免会遇到各种问题。目前遇到最大的问题是在使用axios.post的请求向Java后端传入入参时,后端无法接收到参数。在这里主要处理移动端浏览器兼容的问题。
在这里我提供了两种解决办法:
一、URLSearchParams.append()方法
由于URLSearchParams接口在各个浏览器兼容性问题,这种方法在PC端绝大多数浏览器是OK的,但是在手机端正相反,基本上都不支持。如图:
getBarCode : _ =& {
let param = new URLSearchParams();
param.append("userName","admin");
param.append("userPassword","admin");
axios.post("/index.html",param)
.then(function(response){
console.log(response);
.catch(function(response){
console.log(response)
二、主要解决移动端浏览器兼容性问题
transformRequest: function (data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
return ret
axios.post(url,this.transformRequest(param),{
headers: {
'Content-Type': 'application/x-www-form-charset=utf-8'
}).then(function(res){
console.log(res);
}).catch(function(res){
console.log(res);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:48次
排名:千里之外我们知道,"GET"请求中,通常把参数放在URL后面,比如这样/season-huang/index?param=yes&article=1其中,红色部分便是URL中的参数。
那么,如何通过Javascript得到它呢?而且怎么从这么一堆字符串中找到我所需要的参数所对应的值呢?
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "": decodeURIComponent(results[1]);
console.log(getParameterByName("param")) //yes
先来解释下这段代码吧:
1:定义一个&getParameterByName 函数,接收需要查询的参数的key,然后返回这个参数的value
2:name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 这句代码的作用是把 "[" &换成 "\[" , 把 "]" 换成 "\]" ,之所以做这么一个转换,是因为下面需要使用name这个变量去构造一个正则表达式,而 [ 和 ] 在正则中是关键字,所以需要转义。
3&var regex = new RegExp("[\\?&]" + name + "=([^&#]*)")
这句代码比较简单,匹配 ? 或者 & 然后是 name 然后是 = 和 非(&或者#)。
4&results = regex.exec(location.search);&return results == null ? "" : decodeURIComponent(results[1]);
这两句放一起看把,首先 location.search 拿到全部的查询字符串(即文章最开头给的范例URL中红色部分),然后使用正则的exec方法去匹配出结果,这个方法会返回一个数组,在这个例子里面,results这个数组为["?params=yes","yes"]。这里要说明下,因为在正则中,给匹配出yes的部分加了个括号分组,所以结果中数组的第二项(results[1])为yes。
这个函数的确写的很优雅,很强大。但是呢,有一个缺点,就是每次我需要查询的一个参数的时候,都需要进行这么一个过程,构造正则,匹配location.search,返回结果。但是很明显,当我们页面载入完成的时候,URL是固定的,不会变得(不考虑html5 history api),所以每次进行这么一个过程很浪费资源,所以有了下面这个方法。
(window.onpopstate = function() {
var match,
pl = /\+/g,
search = /([^&=]+)=?([^&]*)/g,
decode = function(s) {
return decodeURIComponent(s.replace(pl, " "));
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
  //urlParams的结果
urlParams = {
param: "yes",
article: "1"
console.log(urlParams["param"]);
// -& "yes"
console.log("article" in urlParams);
// -& true
这段代码比较简单,唯一要说明的是&pl = /\+/g,&s.replace(pl, " ")); 之所以会有这么一句,是因为在URL规范里面,加号(+)会被编码为空格,所有在decode的时候,需要把加号转回空格去。
这个方法里面,当页面加载完成时,会把URL中所有参数放在urlParams这个对象里面。之后只需要查找这个对象的属性就可以找到相应的结果了。
在实际工作中,个人认为,这种方法比第一种可取。
var qs = (function(a) {
if (a == "") return {};
var b = {};
for (var i = 0; i & a. ++i)
var p=a[i].split('=');
if (p.length != 2) continue;
b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
})(window.location.search.substr(1).split('&'));
& qs["param"]; // yes& qs["article"];
// 1& qs["nothere"];
// undefined (object)
比较简单明了,这里对代码就不做解释了。和方法二一样,把结果存储在qs这个对象里面。
function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
如果是在一个页面里偶尔用一次,并且对代码的字节数有强迫症的人,可以使用这个方法。
最后,有一些jQuery插件也实现了这样的功能。不过个人认为这种小方法写成插件形式并不是很有必要的感觉,所以在这里就不列举出来了,可以自行谷歌。
本文参考 :&
转载本站文章请注明作者和出处&&,请勿用于任何商业用途
阅读(...) 评论()

我要回帖

更多关于 js的urlsearchparams 的文章

 

随机推荐