0

Tengo la siguiente función de javascript. pero no logra ejecutarse correctamente.

//Para mostrar la forma de pago dependiendo del Estado
function mostrar_formaPago(estado)
{
    var contenedor, m; 
    contenedor = document.getElementById('contenedor2');  
    estado = document.form1.estado.options[document.form1.estado.selectedIndex].value
    var data='estado='+estado+'';

    ajax=nuevoAjax(); 

    ajax.open('POST','ajax_tarjeta.php',true); 

    ajax.onreadystatechange=function() 
    { 
        if (ajax.readyState==4) 
        { 
            contenedor.innerHTML = ajax.responseText 
        } 
    }

    ajax.setRequestHeader('Connection','Close');
    ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    ajax.setRequestHeader('Cache-Control','no-cache, must-revalidate');
    ajax.setRequestHeader('Expires','Mon, 26 Jul 1997 05:00:00 GMT');
    ajax.send(data);
}

tengo algún error en el código?

el documento ajax_tarjeta.php tiene el siguiente codigo

$estado=$_POST['estado'];

$sql="SELECT * FROM  tarjetas WHERE sw_activo='$estado'";

echo "sql:<br>".$sql;
$consulta=mysql_query($sql) or die(mysql_error());

echo "<select name = 'cod_tarj' style='border-color: #FF0000 #FF0000; border-width: 2px 2px; border-style: solid solid; font-size:8pt; color: #FF0000; letter-spacing; width:150px'>";
    echo "<option value = ''></option>";
        while($result=mysql_fetch_array($consulta)) 
        {
            echo "<option value = ".$result['cod_tarj'].">".$result['cod_tarj']."_".$result['desc_tarj']."</option>";
        }

echo "</select>";
?>
Pako LordPakus
  • 491
  • 5
  • 21
Norbey Martinez
  • 459
  • 2
  • 7
  • 18
  • ¿Recibes algún mensaje de error en la consola de JS? – Alvaro Montoro May 24 '16 at 13:35
  • 2
    Falta bastante información para poder contestarte. ¿Cómo llamas a la función mostrar_formaPago? ¿Para qué recibe como parámetro una variable estado si no haces nada con ese valor en la función? ¿Cómo tienes definida la función nuevoAjax? – Asier Villanueva May 24 '16 at 13:37
  • Aparte: **este código puede sufrir ataques de inyección SQL**, es muy importante que corrijas esas vulnerabilidades lo antes posible, especialmente considerando que estás tratando con métodos de pago y tarjetas de crédito. Lee más sobre inyección SQL, qué es y cómo evitarla, en la [Wikipedia](https://es.wikipedia.org/wiki/Inyección_SQL) o en esta otra [pregunta de SOes](http://es.stackoverflow.com/questions/10518/qu%C3%A9-es-la-inyecci%C3%B3n-sql-y-c%C3%B3mo-puedo-evitarla) – Alvaro Montoro May 24 '16 at 13:40
  • @AsierVillanueva este seria la forma de llamar la funcion, por medio de un onchange echo ""; echo "Listar Forma de Pago:"; echo ""; echo ""; echo "Forma pago:"; echo "
    "
    – Norbey Martinez May 24 '16 at 14:06

1 Answers1

0

Hice la prueba y a mí me funcionó con los siguientes cambios. Muestro una simplificación que funciona sin la base de datos y completando las partes faltantes.

<form id=form1 name=form1 action=post method=>
<div class='cs'>Listar Forma de Pago:</div>
<select id='select_estado' name='estado' onchange='mostrar_formaPago()'>
<option value='0'></option>
<option value='3'>Todas</option>
<option value='1'>Activas</option>
<option value='0'>Inactivas</option>
</select>
<div class='cs'>Forma pago</div><div id='contenedor2'></div>
</form>
<script>
function mostrar_formaPago(estado)
{
        var contenedor, m; 
  contenedor = document.getElementById('contenedor2');  
 // document.form1.orden.value = ''

  estado = document.form1.estado.options[document.form1.estado.selectedIndex].value

  var data='estado='+estado+'';
  /// ajax=nuevoAjax(); 
  var ajax=new XMLHttpRequest();

  ajax.open('POST','ajax_tarjeta.php',true); 

  ajax.onreadystatechange=function() 
  { 
    if (ajax.readyState==4) { 

       contenedor.innerHTML = ajax.responseText 
    } 

  }

        ajax.setRequestHeader('Connection','Close');
        ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        ajax.setRequestHeader('Cache-Control','no-cache, must-revalidate');
        ajax.setRequestHeader('Expires','Mon, 26 Jul 1997 05:00:00 GMT');
        ajax.send(data);

}
</script>

y en el ajax_tarjeta.php le quité la parte de la base de datos (por si es eso lo que no anda) reemplazándolo por un renglón solo de ejemplo:

<?php
header('Access-Control-Allow-Origin','*');

$estado=$_POST['estado'];

$sql="SELECT * FROM  tarjetas WHERE sw_activo='$estado'";

echo "sql:<br>".$sql;

echo "<select name = 'cod_tarj' style='border-color: #FF0000 #FF0000; border-width: 2px 2px; border-style: solid solid; font-size:8pt; color: #FF0000; letter-spacing; width:150px'>";
    echo "<option value = ''></option>"; 
        echo "<option value = ".'77'.">".'77'."_".'esta'."</option>";
echo "</select>";
?>

El select estaba mal en tu comentario y el nuevoAjax lo reemplacé también. Lo probé en Chrome y funciona.

Podrías probar con este ejemplo para ver si te ayuda o contarnos si esto te anda o no. También se puede ver si anda o no la conexión con la base de datos reemplazando el OR DIE por algo que muestre el mensaje de error de la conexión

Emilio Platzer
  • 2,428
  • 1
  • 10
  • 32