open - return redirect javascript
Usando el parĂ¡metro GET de una URL en JavaScript (11)
¿Usando jquery? Lo he usado antes: http://projects.allmarkedup.com/jquery_url_parser/ y funcionó bastante bien.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo recuperar los parámetros GET de javascript? [duplicado] 17 respuestas
Si estoy en una página como
http://somesite.com/somepage.php?param1=asdf
En el JavaScript de esa página, me gustaría establecer una variable para el valor del parámetro en la parte GET de la URL.
Entonces en JavaScript:
<script>
param1var = ... // ... would be replaced with the code to get asdf from URI
</script>
¿Que sería?
Aquí hay un código de muestra para eso.
<script>
var param1var = getQueryVariable("param1");
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
alert(''Query Variable '' + variable + '' not found'');
}
</script>
Aquí hay una versión que le gusta a JSLint:
/*jslint browser: true */
var GET = {};
(function (input) {
''use strict'';
if (input.length > 1) {
var param = input.slice(1).replace(//+/g, '' '').split(''&''),
plength = param.length,
tmp,
p;
for (p = 0; p < plength; p += 1) {
tmp = param[p].split(''='');
GET[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp[1]);
}
}
}(window.location.search));
window.alert(JSON.stringify(GET));
O si necesita soporte para varios valores para una clave como, por ejemplo. ? clave = valor1 y clave = valor2 puede usar esto:
/*jslint browser: true */
var GET = {};
(function (input) {
''use strict'';
if (input.length > 1) {
var params = input.slice(1).replace(//+/g, '' '').split(''&''),
plength = params.length,
tmp,
key,
val,
obj,
p;
for (p = 0; p < plength; p += 1) {
tmp = params[p].split(''='');
key = decodeURIComponent(tmp[0]);
val = decodeURIComponent(tmp[1]);
if (GET.hasOwnProperty(key)) {
obj = GET[key];
if (obj.constructor === Array) {
obj.push(val);
} else {
GET[key] = [obj, val];
}
} else {
GET[key] = val;
}
}
}
}(window.location.search));
window.alert(JSON.stringify(GET));
Así es cómo podría hacerlo en Coffee Script (solo si alguien está interesado).
decodeURIComponent( v.split( "=" )[1] ) if decodeURIComponent( v.split( "=" )[0] ) == name for v in window.location.search.substring( 1 ).split( "&" )
De mi archivo de programación:
function querystring(key) {
var re=new RegExp(''(?://?|&)''+key+''=(.*?)(?=&|$)'',''gi'');
var r=[], m;
while ((m=re.exec(document.location.search)) != null) r[r.length]=m[1];
return r;
}
Si el valor no existe, se devuelve una matriz vacía.
Si el valor existe, una matriz es return que tiene un elemento, el valor.
Si existen varios valores con el nombre, se devuelve una matriz que contiene cada valor.
Ejemplos:
var param1var = querystring("param1")[0];
document.write(querystring("name"));
if (querystring(''id'')==''42'') alert(''We apoligize for the inconvenience.'');
if (querystring(''button'').length>0) alert(querystring(''info''));
Esto se veía bien:
function gup( name ){
name = name.replace(/[/[]/,"///[").replace(/[/]]/,"///]");
var regexS = "[//?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
Desde http://www.netlobo.com/url_query_string_javascript.html
Hice esta variación de la solución de Gnarf, por lo que la llamada y el resultado son similares a PHP:
function S_GET(id){
var a = new RegExp(id+"=([^&#=]*)");
return decodeURIComponent(a.exec(window.location.search)[1]);
}
Pero como ser llamado en una función ralentiza el proceso, es mejor usarlo como global:
window[''
var_name ''] = decodeURIComponent( /
var_in_get =([^&#=]*)/.exec(window.location.search)[1] );
ACTUALIZAR
Como todavía estoy aprendiendo JS, creé una mejor respuesta en un comportamiento más JS:
Url = {
get get(){
var vars= {};
if(window.location.search.length!==0)
window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value){
key=decodeURIComponent(key);
if(typeof vars[key]==="undefined") {vars[key]= decodeURIComponent(value);}
else {vars[key]= [].concat(vars[key], decodeURIComponent(value));}
});
return vars;
}
};
Esto permite ser llamado simplemente usando Url.get
.
Ejemplo El url ?param1=param1Value¶m2=param2Value
se puede llamar así:
Url.get.param1 //"param1Value"
Url.get.param2 //"param2Value"
aquí hay un snipet:
// URL GET params
url = "?a=2&a=3&b=2&a=4";
Url = {
get get(){
var vars= {};
if(url.length!==0)
url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value){
key=decodeURIComponent(key);
if(typeof vars[key]==="undefined") {vars[key]= decodeURIComponent(value);}
else {vars[key]= [].concat(vars[key], decodeURIComponent(value));}
});
return vars;
}
};
document.querySelector(''log'').innerHTML = JSON.stringify(Url.get);
<log></log>
No necesitas hacer nada especial, en realidad. Puede combinar JavaScript y PHP para obtener variables de PHP directamente en JavaScript.
var param1val = <?php echo $_GET[''param1''] ?>;
Puede obtener la parte de "búsqueda" del objeto de ubicación, y luego analizarlo.
var matches = /param1=([^&#=]*)/.exec(window.location.search);
var param1 = matches[1];
Puedes usar esta función
function getParmFromUrl(url, parm) {
var re = new RegExp(".*[?&]" + parm + "=([^&]+)(&|$)");
var match = url.match(re);
return(match ? match[1] : "");
}
Si ya está ejecutando una página php, entonces
php bit:
$json = json_encode($_REQUEST, JSON_FORCE_OBJECT);
print "<script>var getVars = $json;</script>";
js bit:
var param1var = getVars.param1var;
Pero para las páginas Html, la solución de Jose Basilio me parece buena.
¡Buena suerte!