AYUDA con AJAX

20 views
Skip to first unread message

Manuel Gil

unread,
Nov 18, 2009, 6:24:31 PM11/18/09
to Kumbia Enterprise Framework
Hola a todos,

Descripción general:

Estoy intentando crear un formulario de modificación de datos de
usuario con formRemote y un buttom tipo submit; dentro de la misma
vista tengo un formulario para ingresar la cedula del usuario, y a su
vez tengo defino un divisor en donde quiero que me cargue el resultado
de la consulta con los respectivos datos del usuario

El problema

Cuando envio la cedula del usuario al metodo cargar desde el
formulario de modificacion de datos de usario, no me muetra la vista
es decir NO CARGA NADA (PANTALLA EN BLANCO) SIN DATOS EN LOS INPUTs

// controlador usuario

// este método carga la vista con el formulario de modificación de
datos del usuario

public function guicargardatosAction(){

}

// método encargado de generar la informacion para despues ser
cargada en la vista

public function cargarAction(){

//Se indica que la respuesta es AJAX
$this->setResponse('ajax');

$reglas = array(

"cedula" => array(
"filter" => "extraspaces|int",
"message" => "Por favor ingrese la cedula"
),
);

if($this->validateRequired($reglas)==true){

$this->Institucion = new Institucion();
$this->Ciudad = new Ciudad();
$cedula = $this->getPostParam("cedula");
$this->Usuario = new Usuario();
$this->row = $this->Usuario->findFirst("cedula = '$cedula'");
if($this->row == true){
$this->id = $this->row->getId();
$this->nombre = $this->row->getNombre();
$this->apellido = $this->row->getApellido();
$this->direccion = $this->row-
>getDireccion();
$this->correo = $this->row->getCorreo();
$this->telefono = $this->row->getTelefono();
$this->cargo = $this->row->getCargo();

$this->query1 = $this-
>Institucion->findFirst($this->row->getInstitucionId());
$this->query2 = $this->Ciudad->findFirst($this->row-
>getCiudadId());

}else{

Flash::error("El usuario no se encuentra registrado en el
sistema");
$this->routeTo("action:guicargardatos");
}

}else{
Flash::error("Faltan campos por llenar");
$this->routeTo("action:guicargardatos");
}

}


// vista


<div id="menu">
<?php View::renderPartial('menuUsuario') ?>
</div>

<div class="cajetin">
<div id="box" >
<img src="/SIPLEM/img/Rename.png" alt="descripción" />
<h4>Modificar</h4>

<?php echo Tag::formRemote('usuario/cargar','update:
consulta', 'required:cedula') ?>

<label id="cedula1"><span> Cedula:</span>
<input type="text" name="cedula" id="cedula1"/>
</label>
<input type="submit" name="buscar" id="buscar"
value="Enviar" />

<?php echo Tag::endForm() ?>

<div id="consulta" >
<label><span>Nombre:</span>
<input type="text" name="nombre" id="nombre" value="<?php
echo $nombre ?>"/>
</label>
<label><span>Apellidos:</span>
<input type="text" name="apellido" id="apellidos"
value="<?php echo $apellido ?>"/>
</label>
<label><span>Direccion:</span>
<input type="text" name="direccion" id="direccion"
value="<?php echo $direccion ?>" />
</label>
<label><span>Correo:</span>
<input type="text" name="correo" id="correo"
value="<?php echo $correo ?>"/>
</label>
<label><span>Telefono:</span>
<input type="text" name="telefono" id="telefono"
value="<?php echo $telefono ?>"/>
</label>

</div>
</div>
</div>

Manuel Gil

unread,
Nov 18, 2009, 11:25:15 PM11/18/09
to Kumbia Enterprise Framework
Ups.. se me olvido, LES ESTARE MUY AGRADECIDO POR LA AYUDA

Antonio Lopez

unread,
Nov 20, 2009, 9:29:18 AM11/20/09
to Kumbia Enterprise Framework
Creo que esta confundido en la forma en la que trabaja una software
para la web.

El hecho de asignar un valor al $this->nombre no hace que se
actualicen los valores de los input cuando estos ya existen en la
vista actual. Es necesario volver a generar todo el HTML del
formulario para que estos se vean reflejados ó actualizarlos via DOM.

El siguiente ejemplo muestra como actualizar datos con ajax despues de
enviarlos al servidor.

apps/default/controllers/test_controller.php

<?php

class TestController extends ApplicationController {

public function indexAction(){

}

public function buscarAction(){
$this->setResponse('json');

$reglas = array(
"cedula" => array(
"filter" => "extraspaces|int",
"message" => "Por favor ingrese la cedula"
),
);

$response = array();

if($this->validateRequired($reglas)==true){
$response['status'] = 'OK';
$response['data'] = array();

//Aqui se pueden agregar más campos
$response['data'][] = array(
'field' => 'nombre',
'value' => 'Carlos'
);
$response['data'][] = array(
'field' => 'direccion',
'value' => 'Cra 19 #10-20'
);
$response['data'][] = array(
'field' => 'telefono',
'value' => '01800112721'
);
} else {
//Mostrar errores de la validación
$response['status'] = 'ERROR';
$response['messages'] = array();
foreach($this->getValidationMessages() as $message){
$response['messages'][] = array(
'field' => $message->getField(),
'text' => $message->getMessage()
);
}
}
return $response;

}

}

apps/default/views/test/index.phtml

<script type="text/javascript">

function buscar(){
//Enviar datos del formulario con AJAX
new Ajax.Request(Utils.getKumbiaURL("test/buscar"), {
parameters: $('formaUsuario').serialize(),
onSuccess: function(transport){
var response = transport.responseText.evalJSON();
if(response.status=='ERROR'){
//Mostrar errores
response.messages.each(function(message){
$('messages').update(message.text);
new Effect.Highlight(message.field);
});
} else {
//Actualizar datos cuando el estado es OK
response.data.each(function(data){
$(data.field).setValue(data.value)
});
}
}
})
}

</script>

<div id="messages"></div>

<form id="formaUsuario">
<b>Cedula:</b> <?php echo Tag::textField('cedula') ?>
<input type="button" value="Consultar" onclick="buscar()"/>
</form>

<table>
<tr>
<td align="right">Nombre</td>
<td><?php echo Tag::textField('nombre') ?></td>
</tr>
<tr>
<td align="right">Direccion</td>
<td><?php echo Tag::textField('direccion') ?></td>
</tr>
<tr>
<td align="right">Telefono</td>
<td><?php echo Tag::textField('telefono') ?></td>
</tr>
</table>

Es importante entender que siempre que se use AJAX el comportamiento
de los programas no es el normal y se debe hacer uso de javascript
para manejar el flujo de la aplicacion.
Reply all
Reply to author
Forward
0 new messages