Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Por que no envia correctamente los radio?

Estas en el tema de Por que no envia correctamente los radio? en el foro de Javascript en Foros del Web. Buenas!! Vereis tengo un form que envia mediante ajax la información y envia bien todos los campos menos los input es el siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 15/09/2015, 14:17
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Por que no envia correctamente los radio?

Buenas!!

Vereis tengo un form que envia mediante ajax la información y envia bien todos los campos menos los input es el siguiente:


Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3. function nuevoAjax(){
  4.     var xmlhttp=false;
  5.     try {
  6.     xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  7.     } catch (e) {
  8.     try {
  9.     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  10.     } catch (E) {
  11.     xmlhttp = false;
  12.     }
  13.     }
  14.  
  15.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  16.     xmlhttp = new XMLHttpRequest();
  17.     }
  18.     return xmlhttp;
  19. }
  20.  
  21. function enviarFormulario(url, formid, divrespuesta){
  22.         var Formulario = document.getElementById(formid);
  23.         var longitudFormulario = Formulario.elements.length;
  24.         var cadenaFormulario = "";
  25.         var sepCampos;
  26.         sepCampos = "";
  27.         for (var i=0; i <= Formulario.elements.length-1;i++) {
  28.             cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value);
  29.             sepCampos="&";
  30.     }
  31.     peticion=nuevoAjax();
  32.     peticion.open("POST", url, true);
  33.     peticion.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
  34.     peticion.send(cadenaFormulario);
  35.     peticion.onreadystatechange = function() {
  36.           if (peticion.readyState == 4 && (peticion.status == 200 || window.location.href.indexOf ("http") == - 1)){
  37.                 document.getElementById(divrespuesta).innerHTML = peticion.responseText;
  38.           }
  39.     }
  40. }
  41. var vv_1 = 0;
  42.  
  43. function validar(check,grupo) {
  44.  
  45.  
  46.  
  47.     if(document.form_opinion.recomendar[0].checked){
  48.  
  49.         vv_1++;
  50.     }
  51.  
  52.     if(document.form_opinion.recomendar[1].checked){
  53.  
  54.         vv_1++;
  55.     }
  56.  
  57. }  
  58.  
  59.  
  60. function control_validacion (){
  61. enviarFormulario('enviar_comentarios.php','form_opinion', 'opinion_aviso');
  62. }


Código PHP:
                     <form id="form_opinion" name="form_opinion"  action="#" >
                        <ul class="review-f-list">
                          <li>
                              <label>Nombre: *</label>
                                <input name="nombre" id="nombre" type="text" />
                            </li>
                            <li>
                              <label>Email: (No se publicará)</label>
                              <input name="email" type="text" />
                            </li>
                            <li>
                              <label>Opinión: *</label>
                                <textarea name="opinion" cols="2" rows="20"></textarea>
                            </li>
                            </ul>
                              <label>Cual es tu calificación para <strong>'.utf8_encode($array_articulo['articulo']).'</strong>*</label>
                                <div class="rating-list">

                                  <table width="100%" cellspacing="0" style="margin:10px 0px 10px 0px;"> 
                                  
                                  <tr>
                                  <td style="width:155px; padding-bottom:13px;">
                                    <span>¿Lo recomendarías? </span>
                                  </td>
                                  <td style=" padding-bottom:13px;">

                                  Si: <input type="radio" name="recomendar" value="si" id="si" style="margin-right:5px; onclick="validar(form_opinion.si,0)"/>
                                  No: <input type="radio" name="recomendar" value="no" id="no" onclick="validar(form_opinion.no,0)"/>
                                  </td>
                                  </tr>

                                  <tr>
                                  <td style="width:155px;">
                                    <span>Valoración del artículo: </span>
                                  </td>
                                    <td valign="top" width="">

                                     <div class="Clear">
                                      <input class="star required" type="radio" name="valoracion" value="1"/>
                                      <input class="star" type="radio" name="valoracion" value="2"/>
                                      <input class="star" type="radio" name="valoracion" value="3"/>
                                      <input class="star" type="radio" name="valoracion" value="4"/>
                                      <input class="star" type="radio" name="valoracion" value="5"/>
                                      <input class="star" type="radio" name="valoracion" value="6"/>
                                      <input class="star" type="radio" name="valoracion" value="7"/>
                                      <input class="star" type="radio" name="valoracion" value="8"/>
                                      <input class="star" type="radio" name="valoracion" value="9"/>
                                      <input class="star" type="radio" name="valoracion" value="10"/>                    
                                     </div>
                                   
                                    </td>
                                   </tr>
                                  </table>

                                  <table width="100%" cellspacing="0"> 
                                  <tr>
                                  <td style="width:155px;">
                                    <span>Valoración calidad/precio: </span>
                                  </td>
                                    <td valign="top" width="">

                                     <div class="Clear">
                                      <input class="star required" type="radio" name="calidad_precio" value="1"/>
                                      <input class="star" type="radio" name="calidad_precio" value="2"/>
                                      <input class="star" type="radio" name="calidad_precio" value="3"/>
                                      <input class="star" type="radio" name="calidad_precio" value="4"/>
                                      <input class="star" type="radio" name="calidad_precio" value="5"/>
                                      <input class="star" type="radio" name="calidad_precio" value="6"/>
                                      <input class="star" type="radio" name="calidad_precio" value="7"/>
                                      <input class="star" type="radio" name="calidad_precio" value="8"/>
                                      <input class="star" type="radio" name="calidad_precio" value="9"/>
                                      <input class="star" type="radio" name="calidad_precio" value="10"/>                    
                                     </div>
                                   
                                    </td>
                                   </tr>
                                  </table>                                  
                                </div>
                            </li>
                        </ul>';
                        ?>
                        
                        <input type="button" name="bot" id="bot"   onclick="control_validacion ();"  value="Insertar opinión" class="btn btn-primary btn-lg" class="grey-btn" style="background:#272325; float:right; width:132px; margin-right:60px;"/>
<?php
echo
                      </
form>
No se que puede ser, a ver si alguien ve algo

Un saludo

Última edición por franjgg; 15/09/2015 a las 14:38
  #2 (permalink)  
Antiguo 16/09/2015, 09:08
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Por que no envia correctamente los radio?

En realidad, serializar es algo más complejo.

http://stackoverflow.com/questions/1...t-no-framework
  #3 (permalink)  
Antiguo 17/09/2015, 03:56
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Por que no envia correctamente los radio?

Hola he phperos,

He visto este link y varios de los códigos tienen partes que se asemejan al que yo he puesto, antes que nada decir que no tengo demasiados conocimientos de este tema, pero no se si sería posible añadir la parte que creo que se refiere a los radio a mí código, me refiero a está parte:

Código Java:
Ver original
  1. if((field.type != 'checkbox' && field.type != 'radio') || field.checked){
  2.                             query += '&' + field.name + "=" + encodeURIComponent(field.value).replace(/%20/g,'+');
  3.                         }

Un saludo y muchas gracias amigo.
  #4 (permalink)  
Antiguo 17/09/2015, 09:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Por que no envia correctamente los radio?

Para aquel que esté buscando, esta es la solución:

Código Javascript:
Ver original
  1. function nuevoAjax(){
  2.     var xmlhttp=false;
  3.     try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  4.     } catch (e) {try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  5.     } catch (E) {xmlhttp = false;}}
  6.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  7.     xmlhttp = new XMLHttpRequest();}
  8.     return xmlhttp;
  9. }
  10.  
  11. function enviarFormulario(url, formid, divrespuesta){
  12.         var Formulario = document.getElementById(formid);
  13.         var longitudFormulario = Formulario.elements.length;
  14.         var cadenaFormulario="";
  15.         for (var i=0; i <= Formulario.elements.length-1;i++) {
  16.         if(Formulario.elements[i].type=="checkbox" || Formulario.elements[i].type=="radio"){
  17.             if(Formulario.elements[i].checked==true){cadenaFormulario += "&"+Formulario.elements[i].name+'='+encodeURIComponent(Formulario.elements[i].value);}
  18.         }else{cadenaFormulario += "&"+Formulario.elements[i].name+'='+encodeURIComponent(Formulario.elements[i].value);}
  19.         }
  20.     peticion=nuevoAjax();
  21.     peticion.open("POST", url, true);
  22.     peticion.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  23.     peticion.send(cadenaFormulario);
  24.     peticion.onreadystatechange = function() {
  25.         if (peticion.readyState == 4 && (peticion.status == 200 || window.location.href.indexOf ("http") == - 1)){
  26.             RESPUESTA=peticion.responseText;
  27.                 document.getElementById(divrespuesta).innerHTML =RESPUESTA;
  28.         }
  29.     if (peticion.readyState == 4 && peticion.status != 200){
  30.         document.getElementById(divrespuesta)="FALLA EN LA COMUNICACION... SI EL PROBLEMA CONTINUA, FAVOR DE REPORTARLO";
  31.     }
  32.     }
  33. }
  #5 (permalink)  
Antiguo 17/09/2015, 10:24
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Por que no envia correctamente los radio?

Como una manera de evitar repetir las mismas instrucciones, la sección del bucle podría quedar así:

Código Javascript:
Ver original
  1. for (var i=0, elems=Formulario.elements, l=elems.length, cadenaFormulario = []; i < l; i++) {
  2.     if (!("checked" in elems[i]) || elems[i].checked){
  3.         cadenaFormulario.push(elems[i].name+'='+encodeURIComponent(elems[i].value));
  4.     }
  5. }

En cada iteración, comprobamos que el elemento no posea la propiedad checked, es decir, que no sea un radiobutton o un checkbox, o que se encuentre marcado, algo que solo puede ocurrir con los radiobutton y checkbox. Si la condición se cumple, procedemos a ejecutar la instrucción que, como estaba en tu código, era la misma para cuando se trataba de un radiobutton o checkbox y estaba marcado como para cuando no era otro tipo de elemento.

Como también podrás apreciar, en lugar de añadir el par clave-valor como parte de una cadena, lo hago como elemento de un array. Esto es porque, de la forma en la que estaba, se iba a añadir un & innecesario al inicio. Mejor forma un array con los pares clave-valor y, en el método .send(), los unes con un & usando el método .join().

Código Javascript:
Ver original
  1. peticion.send(cadenaFormulario.join("&"));

Un saludo
__________________
«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

Etiquetas: ajax, correctamente, envia, formulario, input, php, valor
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 06:25.