一、通过url传递参数时,如何获取全部参数
在angularJS中的代码块:
$scope.getUrlParams = function (url){
var params = {}, arr;
var hash = url.slice(url.indexOf('?')+1).split('&');
for(var i = 0; i < hash.length; i++) {
arr = hash[i].split('=');
params[arr[0]] = arr[1];
}
return params;
}
通过返回的JSON对象可以直接取出对应参数的值。
例如取出url中名为”errormsg”的参数值:
$scope.getResultFromInterface = function(result){
var params = $scope.getUrlParams(result);
var errormsg = params.errormsg;
二、获取url传递的参数中含有中(日)文的参数值
url在传递含有中(日)文的参数时,会先通过encode()方法进行编码。
之后接收方再通过decode()方法进行解码,以符合url规范。
本例中,如果”errormsg”含有中文,则接受时应对其进行解码:
var errormsg = decode(params.errormsg);
三、遇到的一个未解决问题:
在接收url传递的参数时,之前考虑的是运用正则表达式的方法来获取。
通过遍历”=”以及其左右值来取出”A=a”形式的参数集。
正则表达式代码如下:
$scope.getParamValue = function(url, param){
var pattern = /(\w+)=(\w+)|(\w+)=\[[\s\S]*\]/g;
var parames = {};
// a代表url,b代表等号左边,c代表等号右边
url.replace(pattern, function(a, b, c){
if(a.match(/(\w+)=\[[\s\S]*\]/g)){
var d=a.split("=");
parames[d[0]]=d[1];
} else {
parames[b] = c;
}
});
return parames[param];
};
pattern的正则表达式指的是所有“A=a”的形式。
给对象parames赋值时也是A=a”的形式,不过等号左右的值替换。
if(a.match(/(\w+)=[[\s\S]*]/g)){ 那这个判断的意思是 匹配所有的“A=a”的形式么?
是的话岂不是永远不会走else?
那”&”符号和”?”符号这些东西不用管么?
该方法在接收英文参数时是正确的,但是接收encode后的(或者没有encode)中文字符就会出现接收不到。
目前正在寻找答案中。。。