我需要从URL中检索变量。
我使用这个找到的功能:
function getParams(str) {
var match = str.replace(/%5B/g, '[').replace(/%5D/g, ']').match(/[^=&?]+\s*=\s*[^&#]*/g);
var obj = {};
for ( var i = match.length; i--; ) {
var spl = match[i].split("=");
var name = spl[0].replace("[]", "");
var value = spl[1];
obj[name] = obj[name] || [];
obj[name].push(value);
}
return obj;
}
var urlexample = "http://www.test.it/payments/?idCliente=9&idPagamenti%5B%5D=27&idPagamenti%5B%5D=26"
var me = getParams(stringa);
输出结果为:
{"idPagamenti":["26","27"],"idCliente":["9"]}
但是idCliente
始终不是数组,所以我想要检索:
{"idPagamenti":["26","27"],"idCliente": 9 }
这是小提琴的例子
function getParams(str) {
var match = str.replace(/%5B/g, '[').replace(/%5D/g, ']').match(/[^=&?]+\s*=\s*[^&#]*/g);
var obj = {};
for ( var i = match.length; i--; ) {
var spl = match[i].split("=");
var name = spl[0].replace("[]", "");
var value = spl[1];
obj[name] = obj[name] || [];
obj[name].push(value);
}
return obj;
}
var stringa = "http://www.test.it/payments/?idCliente=9&idPagamenti%5B%5D=27&idPagamenti%5B%5D=26"
var me = getParams(stringa);
$(document).ready(function(){
alert("testing");
console.log(me);
$(".a").html(JSON.stringify(me));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="a">
</div>
&#13;
有人可以帮我修改代码吗?
答案 0 :(得分:0)
我认为你面临着一个真正的范式问题。为什么idCliente不是一个数组,但idPagamenti将是。您应该拥有所有数组或没有但不能同时拥有。 getParams()函数可以为你做出这个选择,你可能应该改变你使用它的方式。
无论如何,这是一个getParams()函数,它将任何单值数组替换为值。请注意,如果您的URI中只有一个idPagamenti,那么您还将拥有idPagamenti而不是数组的单个值。
function getParams(str) {
var match = str.replace(/%5B/g, '[').replace(/%5D/g, ']').match(/[^=&?]+\s*=\s*[^&#]*/g);
var obj = {};
for ( var i = match.length; i--; ) {
var spl = match[i].split("=");
var name = spl[0].replace("[]", "");
var value = spl[1];
obj[name] = obj[name] || [];
obj[name].push(value);
}
Object.keys(obj).forEach(key => {
if (obj[key].length === 1) {
obj[key] = obj[key][0];
}
})
return obj;
}
var urlexample = "http://www.test.it/payments/?idCliente=9&idPagamenti%5B%5D=27&idPagamenti%5B%5D=26"
var me = getParams(stringa);
如果您知道始终将ID作为参数,则还可以通过将var value = spl[1];
替换为var value = parseInt(spl[1], 10);
来为每个参数添加parseInt()