Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] javascript split &

Estas en el tema de javascript split & en el foro de Javascript en Foros del Web. Hola, Mi problema es la siguiente función en la que quiero parsear la url function GetURLParameter(sParam) { var sPageURL = window.location.search.substring(1); var sURLVariables = sPageURL.split('?'); ...
  #1 (permalink)  
Antiguo 22/05/2014, 11:16
 
Fecha de Ingreso: abril-2006
Mensajes: 23
Antigüedad: 18 años, 7 meses
Puntos: 0
javascript split &

Hola,

Mi problema es la siguiente función en la que quiero parsear la url

function GetURLParameter(sParam)
{
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('?');
var index = sURLVariables[0].indexOf(sParam);
if(index!= -1){
var sParameterName = sURLVariables[0].substr(index);
var parameter = sParameterName.split('&')[0];
return sParameterName.split('=')[1];
}
else{
return false;
}
}


Pero me devuelve este error:

Error Traced[line: 64] The entity name must immediately follow the '&' in the entity reference.

Que es exactamente esta línea.

Alguien sabe como se puede solucionar?

Gracias
  #2 (permalink)  
Antiguo 22/05/2014, 12:13
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: javascript split &

Pues a mi me funciona PERFECTO!

Código Javascript:
Ver original
  1. <script>
  2.  
  3. /*
  4.     http://localhost/Js/testB.html?var1=casa&var2=carro
  5. */
  6. function GetURLParameter(sParam)
  7. {
  8.     var sPageURL = window.location.search.substring(1);
  9.     var sURLVariables = sPageURL.split('?');
  10.     var index = sURLVariables[0].indexOf(sParam);
  11.    
  12.     if(index!= -1){
  13.         var sParameterName = sURLVariables[0].substr(index);
  14.         var parameter = sParameterName.split('&')[0];
  15.        
  16.         return sParameterName.split('=')[1];
  17.     }
  18.     else{
  19.         return false;
  20.     }
  21. }
  22.  
  23. function exec(){
  24.     console.log(GetURLParameter('var2'));
  25. }
  26.  
  27. </script>
  28.  
  29. <body onload="exec();">
  30. </body>

Voy a http://localhost/Js/testB.html?var1=casa&var2=carro

y me devuelve "carro"
__________________
Salu2!
  #3 (permalink)  
Antiguo 22/05/2014, 15:48
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: javascript split &

buenas!

Cita:
Iniciado por el junco Ver Mensaje
Pero me devuelve este error:

Error Traced[line: 64] The entity name must immediately follow the '&' in the entity reference.
ese mensaje de error no es propio de javascript, sino del user agent del navegador o de un validador de html. lo que ahí sucede es que el script está integrado en el mismo html y la etiqueta SCRIPT es de tipo PCDATA (Parsed Character DATA). lo que significa es que el navegador evalua el contenido de la etiqueta para interpretar otras posibles etiquetas o entidades html. por eso en ocasiones verás script integrados que están envuelto dentro de un comentario html o dentro de un CDATA Section, para que el user-agent ignore esa porción.
Código:
<script ...>
// <![CDATA[      comentario de javascript para que el intérprete javascript no interprete el CDATA Section como código javascript
code
// ]]>
</script>
Código:
<script ...>
<!--               ironicamente el comentario html no necesita estar precedido por comentario javascript, o al menos los navegadores antiguos no lo requerian.
code
-->
</script>
el hecho de que no te funciona se debe más a la linea return sParameterName.split('=')[1];. estás supuesto hacer el split a la variable parameter. de todos modos, el código requiere más elaboración. imagina que tengo estos parámetros foo=bar&o=object y quiero capturar el parámetro o. ¿cual crees que será el resultado?
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 22/05/2014, 16:04
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: javascript split &

Ya que te ayudaron a resolver el problema, aporto con otra solución:

Código Javascript:
Ver original
  1. var fn = function(param){
  2.         var query = location.search,
  3.             pos = query.indexOf(param), //La ubicación del parámetro en la query string
  4.             aux = null, val = null;
  5.  
  6.         if (pos > -1){
  7.             //Tomo la parte de la query desde donde está el parámetro
  8.             aux = query.substr(pos);
  9.  
  10.             if (aux.indexOf("&") > -1)
  11.                 //Tomo el valor del parámetro cuando hayan más a su derecha
  12.                 val = aux.substring(aux.indexOf("=") + 1, aux.indexOf("&"));
  13.             else
  14.                 //Tomo el valor del parámetro cuando este sea el último
  15.                 val = aux.split("=")[1];
  16.          
  17.             return val;
  18.         }
  19.  
  20.         return false;
  21.     };
  22.  
  23. document.body.innerHTML = fn("var1");

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 22/05/2014, 17:49
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: javascript split &

Que pena me meto a preguntar..... pero no lo logro entender bien

Es porque se declara el documento como XHTML en en el DOCTYPE o por que sucede esto ?
__________________
Salu2!
  #6 (permalink)  
Antiguo 22/05/2014, 18:13
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: javascript split &

si, lo muy probable por ser un xhtml. si comparas el DTD de html 4.01 en cualquiera de sus variantes versus cualquier xhtml, notarás que el tipo de dato es distinto para el mismo elemento.

Código:
DTD de html 4.01 strict
<!ELEMENT SCRIPT - - %Script;          -- script statements -->
<!ENTITY % Script "CDATA" -- script expression -->

DTD de xhtml1 strict
<!ELEMENT script (#PCDATA)>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 23/05/2014, 01:32
 
Fecha de Ingreso: abril-2006
Mensajes: 23
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: javascript split &

Cita:
Iniciado por zerokilled Ver Mensaje
buenas!



ese mensaje de error no es propio de javascript, sino del user agent del navegador o de un validador de html. lo que ahí sucede es que el script está integrado en el mismo html y la etiqueta SCRIPT es de tipo PCDATA (Parsed Character DATA). lo que significa es que el navegador evalua el contenido de la etiqueta para interpretar otras posibles etiquetas o entidades html. por eso en ocasiones verás script integrados que están envuelto dentro de un comentario html o dentro de un CDATA Section, para que el user-agent ignore esa porción.
Código:
<script ...>
// <![CDATA[      comentario de javascript para que el intérprete javascript no interprete el CDATA Section como código javascript
code
// ]]>
</script>
Código:
<script ...>
<!--               ironicamente el comentario html no necesita estar precedido por comentario javascript, o al menos los navegadores antiguos no lo requerian.
code
-->
</script>
el hecho de que no te funciona se debe más a la linea return sParameterName.split('=')[1];. estás supuesto hacer el split a la variable parameter. de todos modos, el código requiere más elaboración. imagina que tengo estos parámetros foo=bar&o=object y quiero capturar el parámetro o. ¿cual crees que será el resultado?

Muchas gracias, funcionó poniendo la seccion CDATA. En cuanto a que pasaría con foo=bar&o=object y quiero capturar el parámetro o, si que funciona, porque es precisamente lo que estoy haciendo, ya que estoy recuperando el segundo parametro.

Gracias de nuevo
  #8 (permalink)  
Antiguo 23/05/2014, 13:44
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: javascript split &

Cita:
Iniciado por el junco Ver Mensaje
En cuanto a que pasaría con foo=bar&o=object y quiero capturar el parámetro o, si que funciona, porque es precisamente lo que estoy haciendo, ya que estoy recuperando el segundo parametro.
¿supones, o lo comprobaste? a mi me devuelve bar en lugar de object. en todo caso, lo haría de esta forma.

Código:
String.prototype.query = function(split, begin){
var split = split || ['&', '='], query = this, queryObj = {};
if(split.constructor != Array || split.length != 2)throw new TypeError('Excepted type of argument not valid or argument lenght size not allowed.');
if(begin)query = query.replace(begin, '');
query = query.split(split[0]);
	while(query.length){
	var pair = query.shift().split(split[1]);
		if(pair[0] in queryObj){
		if(queryObj[pair[0]].constructor != Array)queryObj[pair[0]] = new Array(queryObj[pair[0]]);
		queryObj[pair[0]].push(decodeURIComponent(pair[1]));
		}
		else queryObj[pair[0]] = (pair[1])? decodeURIComponent(pair[1]): undefined;
	}
return queryObj;
}

GET = 'foo=bar&o=object'.query();
GET['o']; // object;
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: parametros, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:12.