Estoy tratando de analizar los parámetros de una cadena de consulta usando este complemento jquery y esta cadena de consulta de muestra:

http://test.com/?xnJTqqWEclJnnPEvWH&cid=3DF3-00-=63-D4-DA-2F-91-6B-39-39-75-E4-C1-B7-28-12&mid=3D93-36-14-46-4D-52-9E-48-17-=6A-50-13-56-FA-0A-06&PROMO_MONTH=3D201106

Usando el código para el complemento:

console.log($.getQueryParam( "cid" ));

El cid se divide en la primera instancia del signo "=", por lo que en lugar de:

3DF3-00-=63-D4-DA-2F-91-6B-39-39-75-E4-C1-B7-28-12

Entiendo

3DF3-00-

¿Es este comportamiento normal? ¿El signo igual hace algo en particular en esta cadena de consulta? Si no, ¿cómo analizo esta cadena de consulta para obtener el parámetro completo?

0
mheavers 30 ago. 2011 a las 00:54

3 respuestas

La mejor respuesta

Utilice gup en su lugar. Veo que se usa en bastantes lugares y funciona bien. Es muy simple. Tenga en cuenta que hice un pequeño cambio en el violín a calzador en la url. El siguiente código es lo que realmente debería usar.

http://jsfiddle.net/mrtsherman/trqJ8/

gup('cid');

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];
}
2
mrtsherman 29 ago. 2011 a las 21:10

El complemento en sí no fue escrito para acomodar una cadena como esa. El culpable es el siguiente código ...

if (params[0] == param) {
 return params[1] || '';
}

Poco antes de este paso, el script del complemento hace un split() en el signo igual creando una matriz. El fragmento de código anterior se debe cambiar a algo como lo siguiente para que su recuperación de consultas funcione ...

if (params[0] == param) {
    var paramOut = '';
    for (var p = 1; p < params.length; p++) {
        paramOut += params[p] + '=';
    }
    return paramOut.substr(0, paramOut.length - 1); // to remove the trailing equal sign
} else {
    return '';
}

Aquí está el complemento parcheado con mis revisiones en caso de que todavía esté interesado en usarlo ...

(function($){$.getQueryParam=function(param){var pairs=location.search.substring(1).split('&');for(var i=0;i<pairs.length;i++){var params=pairs[i].split('=');if(params[0]==param){var paramOut='';for(var p=1;p<params.length;p++){paramOut+=params[p]+'=';}return paramOut.substr(0, paramOut.length-1);}else{return '';}}return undefined;};})(jQuery);
2
65Fbef05 29 ago. 2011 a las 21:29

Está. "=" se utiliza como delimitador de partes de la consulta, por lo que debe escapar de ella. El motor de búsqueda Yandex lo hace así: http://yandex.ru/yandsearch?text=%3D

1
Alleo 29 ago. 2011 a las 20:58