¿Cómo simplemente obtengo valores GET
y POST
con JQuery?
Lo que quiero hacer es algo como esto:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
fuente
¿Cómo simplemente obtengo valores GET
y POST
con JQuery?
Lo que quiero hacer es algo como esto:
$('#container-1 > ul').tabs().tabs('select', $_GET('selectedTabIndex'));
Para los parámetros GET, puede obtenerlos de document.location.search
:
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
$_GET[decode(arguments[1])] = decode(arguments[2]);
});
document.write($_GET["test"]);
Para los parámetros POST, puede serializar el $_POST
objeto en formato JSON en una <script>
etiqueta:
<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;
document.write($_POST["test"]);
</script>
Mientras lo hace (haciendo cosas en el lado del servidor), también puede recopilar los parámetros GET en PHP:
var $_GET = <?php echo json_encode($_GET); ?>;
Nota: Necesitará PHP versión 5 o superior para usar la json_encode
función incorporada.
Actualización: aquí hay una implementación más genérica:
function getQueryParams(qs) {
qs = qs.split("+").join(" ");
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])]
= decodeURIComponent(tokens[2]);
}
return params;
}
var $_GET = getQueryParams(document.location.search);
Hay un complemento para jQuery para obtener parámetros GET llamados .getUrlParams
Para POST, la única solución es hacer eco del POST en una variable javascript usando PHP, como sugirió Moran.
¿Por qué no usar PHP antiguo? por ejemplo, digamos que recibimos un parámetro GET 'target':
function getTarget() {
var targetParam = "<?php echo $_GET['target']; ?>";
//alert(targetParam);
}
O puede usar este http://plugins.jquery.com/project/parseQuery , es más pequeño que la mayoría (449 bytes minificados), devuelve un objeto que representa pares nombre-valor.
Con cualquier lenguaje del lado del servidor, tendrá que emitir las variables POST en javascript.
.RED
var my_post_variable = '<%= Request("post_variable") %>';
Solo tenga cuidado con los valores vacíos. Si la variable que intenta emitir está realmente vacía, obtendrá un error de sintaxis de JavaScript. Si sabe que es una cadena, debe envolverla entre comillas. Si es un número entero, es posible que desee probar para ver si realmente existe antes de escribir la línea en javascript.
Puede probar el complemento Query String Object para jQuery.
Aquí hay algo para reunir todas las GET
variables en un objeto global, una rutina optimizada durante varios años. Desde el surgimiento de jQuery, ahora parece apropiado almacenarlos en jQuery, estoy consultando con John sobre una posible implementación central.
jQuery.extend({
'Q' : window.location.search.length <= 1 ? {}
: function(a){
var i = a.length,
r = /%25/g, // Ensure '%' is properly represented
h = {}; // (Safari auto-encodes '%', Firefox 1.5 does not)
while(i--) {
var p = a[i].split('=');
h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
}
return h;
}(window.location.search.substr(1).split('&'))
});
Uso de ejemplo:
switch ($.Q.event) {
case 'new' :
// http://www.site.com/?event=new
$('#NewItemButton').trigger('click');
break;
default :
}
Espero que esto ayude. ;)
Los complementos de jQuery parecen agradables, pero lo que necesitaba es una función js rápida para analizar los parámetros get. Esto es lo que encontré.
Si su $ _GET es multidimensional, esto podría ser lo que desea:
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
//handling for multidimensional arrays
if(decode(arguments[1]).indexOf("[]") > 0){
var newName = decode(arguments[1]).substring(0, decode(arguments[1]).length - 2);
if(typeof $_GET[newName] == 'undefined'){
$_GET[newName] = new Array();
}
$_GET[newName].push(decode(arguments[2]));
}else{
$_GET[decode(arguments[1])] = decode(arguments[2]);
}
});
simple, pero útil para obtener vars / valores de URL:
function getUrlVars() {
var vars = [], hash, hashes = null;
if (window.location.href.indexOf("?") && window.location.href.indexOf("&")) {
hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
} else if (window.location.href.indexOf("?")) {
hashes = window.location.href.slice(window.location.href.indexOf('?') + 1);
}
if (hashes != null) {
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars[hash[0]] = hash[1];
}
}
return vars;
}
Lo encontré en algún lugar de Internet, solo solucioné algunos errores
Utilice la siguiente función:
var splitUrl = function() {
var vars = [], hash;
var url = document.URL.split('?')[0];
var p = document.URL.split('?')[1];
if(p != undefined){
p = p.split('&');
for(var i = 0; i < p.length; i++){
hash = p[i].split('=');
vars.push(hash[1]);
vars[hash[0]] = hash[1];
}
}
vars['url'] = url;
return vars;
};
y acceda a las variables como vars['index']
where 'index'
es el nombre de la variable get.
http://foo.com/?a=b#bar
. Piensa que b#bar
es el valor para a
.
Mantenlo simple
reemplace VARIABLE_KEY con la clave de la variable para obtener su valor
var get_value = window.location.href.match(/(?<=VARIABLE_KEY=)(.*?)[^&]+/)[0];
Solo para que conste, quería saber la respuesta a esta pregunta, así que utilicé un método PHP:
<script>
var jGets = new Array ();
<?
if(isset($_GET)) {
foreach($_GET as $key => $val)
echo "jGets[\"$key\"]=\"$val\";\n";
}
?>
</script>
De esa manera, todo mi javascript / jquery que se ejecuta después de esto puede acceder a todo en jGets. Creo que es una solución elegante y agradable.
Mi acercamiento:
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, Regex for replacing addition symbol with a space
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]);
})();