Foros del Web » Programando para Internet » Javascript »

problema al enviar valores que contengan & desde un form, se cortan

Estas en el tema de problema al enviar valores que contengan & desde un form, se cortan en el foro de Javascript en Foros del Web. Pues tengo un formulario sencillo, con el que envio dos campos: URL y TAG cuando la url es del tipo http://url.com/?valor=1&otrovalor=2&masvalores=3 se corta con el ...
  #1 (permalink)  
Antiguo 02/08/2012, 14:59
 
Fecha de Ingreso: agosto-2012
Mensajes: 16
Antigüedad: 11 años, 9 meses
Puntos: 0
problema al enviar valores que contengan & desde un form, se cortan

Pues tengo un formulario sencillo, con el que envio dos campos: URL y TAG

cuando la url es del tipo http://url.com/?valor=1&otrovalor=2&masvalores=3

se corta con el primer &, quedando en http://url.com/?valor=1

Los codigos javascript que uso para que funcione el "ajax" son estos:

Código HTML:
<script type="text/javascript">
function Ajax(){

var xmlhttp=false;
 try{
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 }catch(e){
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }catch(E){
    xmlhttp = false;
  }
 }
 if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
 }
 return xmlhttp;
 
}
</script> 
Código HTML:
 <script type="text/javascript">
  
   function comprobar (valores) {

   divResultado = document.getElementById('contenido');

   ajax=Ajax();

   ajax.open ('POST', 'prueba.php', true);
   
   ajax.onreadystatechange = function() {
		
   if (ajax.readyState==1) { divResultado.innerHTML="cargando.."; }
        
   if (ajax.readyState==4) { divResultado.innerHTML=ajax.responseText; }
    
   }
   
   ajax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
   
   ajax.send(valores);
   
   }

</script> 
y el codigo html, donde esta el form este

Código HTML:
<div id="contenido">

<?

 error_reporting (0);
 
 $url=$_POST["url"];
 
 $tag=$_POST["tag"];
 
 if(!empty($url)) {
 
 echo"$url -> $tag";
 
 } else {

?>

<form method="post" onSubmit="comprobar('url='+document.getElementById('url').value+'&tag='+document.getElementById('tag').value);return false">

<input name="url" type="text" id="url" />

<input name="tag" type="text" id="tag" />

<input type="submit" value="Enviar" />
 
</form>

<? } ?>

</div> 

sin enviar los datos con ajax la url se muestra correctamente, por eso supongo que este es el foro correcto donde plantear mi pregunta.. yo le he estado dando vueltas pero no soy capaz de solucionarlo, mis conocimientos en javascript son nulos
  #2 (permalink)  
Antiguo 02/08/2012, 15:02
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: problema al enviar valores que contengan & desde un form, se cortan

debes escapar el carácter para que sea una URL válida, con escape() o encodeURIComponent()
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Última edición por maycolalvarez; 02/08/2012 a las 15:21 Razón: encodeURIComponent :-D
  #3 (permalink)  
Antiguo 02/08/2012, 15:11
 
Fecha de Ingreso: agosto-2012
Mensajes: 16
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: problema al enviar valores que contengan & desde un form, se cortan

gracias, lo he solucionado con el encodeURIComponent como me has dicho :)
  #4 (permalink)  
Antiguo 02/08/2012, 15:20
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: problema al enviar valores que contengan & desde un form, se cortan

Cita:
Iniciado por onezzz Ver Mensaje
gracias, lo he solucionado con el encodeURIComponent como me has dicho :)
cierto era encode y te coloque decode, a los efectos es la función inversa, saludos
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 02/08/2012, 15:22
 
Fecha de Ingreso: agosto-2012
Mensajes: 16
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: problema al enviar valores que contengan & desde un form, se cortan

Cita:
Iniciado por maycolalvarez Ver Mensaje
cierto era encode y te coloque decode, a los efectos es la función inversa, saludos

Al final me he adelantado, ahora deja de funcionar el ajax

ajax.send.encodeURIComponent(valores);

lo coloqué asi.. no se si es la forma de aplicarlo, yo de javascript apenas tengo conocimiento
  #6 (permalink)  
Antiguo 02/08/2012, 16:08
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: problema al enviar valores que contengan & desde un form, se cortan

Me parece que te estás complicando, si en definitiva los valores son los values de los campos del form, y estás haciendo onsubmit, pasá solo onsubmit="return valores();" y en la función recuperás los values de url y tag,

var varurl = document.getElementById('url').value;
var vartag = document.getElementById('tag').value

contruis la query y la agregás en

ajax.open ('GET', 'prueba.php?url='+varurl+'&tag='+vartag, true);
...
ajax.send(null);

ó si lo preferis con POST

function comprobar(){
var valores="url='+varurl+'&tag='+vartag;


ajax.open ('POST', 'prueba.php', true);
.....
ajax.send(valores);
}

Eso de pasar los par,ametros en el evento onsubmit me parece una recurrencia

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 02/08/2012, 16:09
 
Fecha de Ingreso: agosto-2012
Mensajes: 16
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: problema al enviar valores que contengan & desde un form, se cortan

al final lo solucione agregando la funcion que me dijeron en el form

+encodeURIComponent(document.getElementById('url') .value)

Etiquetas: ajax, formulario, funcion, html, input, php
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 15:47.