Buenas gente, tengo un problema del cual no me doy cuenta cual es, tengo hecho un formulario (antes que nada decir que recien empiezo con ajax), en el cual le paso ciertos valores y los guarda en una tabla. Los inserta bien en la tabla, la operacion sale bien, pero en la respuesta no me vuelve a habilitar el boton y tampoco desaparece el gif de cargando. Diganme que puede ser. Aclaro que si dejo algun campo vacio si hace lo que tiene que hacer, pero con los datos OK no.
form.altaproducto.php
Código HTML:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link href="../css/redmond/jquery-ui-1.9.2.custom.css" rel="stylesheet"> $(function(){
$("#guardar").button();
$("#msj").hide();
$("#cargado").hide();
$("#dialogo").hide();
$('#producto').focus();
var options = {
beforeSubmit: antesdeenviar,
success: respuesta,
dataType: 'json'
};
$('#frmproductos').ajaxForm(options);
});
function antesdeenviar(){
$('#cargado').show();
$('#guardar').button("disable");
}
function respuesta(datos){
$("#cargado").hide();
if(datos.op=='OK'){
$("#msj").html("Producto nuevo guardado exitosamente");
$("#msj").addClass("ui-state-highlight");
$("#msj").show("slow").delay(2000).hide("slow");
}else{
var mensaje="Completa los campos resaltados";
$.each(datos.error,function(item,valor){ //Tomar un elemento del json y hacer uso. pasar 2 parametros, coleccion de datos
$('#'+valor).addClass("ui-state-error");
});
$("#dialogo").html(mensaje);
$("#dialogo").show('slow').delay(2000).hide('slow');
}
$('#guardar').button("enable");
}
<div align="center" style=" width:530px;background-color:#09F; color:#FFFFFF">Nuevo producto
</div> <form id="frmproductos" name="frmproductos" method="post" action="accion.altaproducto.php"> <td colspan="3"><input name="producto" type="text" id="producto" size="37" /></td> <td><input name="costo" type="text" id="costo" size="10" /></td> <td><select name="categoria" id="categoria"> <td><input name="precioa" type="text" id="precioa" size="10" /><br /><input name="preciob" type="text" id="preciob" size="10" /><br /><input name="precioc" type="text" id="precioc" size="10" /></td> <td colspan="3"><input type="text" name="marca" id="marca" /></td> <td colspan="4" align="center"><input type="submit" name="guardar" id="guardar" value="Guardar" /></td> <span id="dialogo" class="ui-state-error ui-corner-all"></span>
accion.altaproducto.php
Código PHP:
Ver original<?php
include "class.productos.php";
$producto=$_POST['producto'];
$descripcion=$_POST['descripcion'];
$categoria=$_POST['categoria'];
$marca=$_POST['marca'];
$costo=$_POST['costo'];
$precioa=$_POST['precioa'];
$preciob=$_POST['preciob'];
$precioc=$_POST['precioc'];
//validacion de que no vengan vacios
$datos['error'][]='producto';
}
$datos['error'][]='descripcion';
}
$datos['error'][]='categoria';
}
$datos['error'][]='marca';
}
$datos['error'][]='costo';
}
$datos['error'][]='precioa';
}
$datos['error'][]='preciob';
}
$datos['error'][]='precioc';
}
//contamos los errores almacenados en $datos
if(count($datos['error'])==0){ $clase=new productos;
if($cod=$clase->nuevoproducto($producto,$descripcion,$categoria,$marca,$costo,$precioa,$preciob,$precioc)){
$datos['id']=$cod;
$datos['op']='OK';
}else{
$datos['op']='ERRORDATOS';
}
}else{
$datos['op']='ERROR';
}
?>
class.productos.php
Código PHP:
Ver original<?php
class productos{
//Creo las variables a utilizar
private $id_producto="";
private $producto="";
private $descripcion="";
private $categoria="";
private $marca="";
private $costo="";
private $precioa="";
private $preciob="";
private $precioc="";
private $stock="";
//Creo la funcion constructora que conecta a la base
function __construct(){
}
//Setters y Getters
//id_producto
public function set_id_producto($valor=""){
$this->id_producto=$valor;
}
public function get_id_producto(){
return $this->id_producto;
}
//producto
public function set_producto($valor=""){
$this->producto=$valor;
}
public function get_producto(){
return $this->producto;
}
//descripcion
public function set_descripcion($valor=""){
$this->descripcion=$valor;
}
public function get_descripcion(){
return $this->descripcion;
}
//categoria
public function set_categoria($valor=""){
$this->categoria=$valor;
}
public function get_categoria(){
return $this->categoria;
}
//marca
public function set_marca($valor=""){
$this->marca=$valor;
}
public function get_marca(){
return $this->marca;
}
//costo
public function set_costo($valor=""){
$this->costo=$valor;
}
public function get_costo(){
return $this->costo;
}
//precio a
public function set_precioa($valor=""){
$this->precioa=$valor;
}
public function get_precioa(){
return $this->precioa;
}
//precio b
public function set_preciob($valor=""){
$this->preciob=$valor;
}
public function get_preciob(){
return $this->preciob;
}
//precio c
public function set_precioc($valor=""){
$this->precioc=$valor;
}
public function get_precioc(){
return $this->precioc;
}
//stock
public function set_stock($valor=""){
$this->stock=$valor;
}
public function get_stock(){
return $this->stock;
}
//Funcion que prepara para guardar nuevo producto
public function nuevoproducto($producto="",$descripcion="",$categoria="",$marca="",$costo="",$precioa="",$preciob="",$precioc=""){
$this->set_producto($producto);
$this->set_descripcion($descripcion);
$this->set_categoria($categoria);
$this->set_marca($marca);
$this->set_costo($costo);
$this->set_precioa($precioa);
$this->set_preciob($preciob);
$this->set_precioc($precioc);
if($this->guardar()){
return $this->get_id_producto();
}else{
return false;
}
}
//Funcion que guarda en la tabla el nuevo producto
public function guardar(){
if($this->get_id_producto()==""){
$sql =sprintf("INSERT INTO productos(producto,descripcion,categoria,marca,costo,precioa,preciob,precioc) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s');",$this->get_producto(),$this->get_descripcion(),$this->get_categoria(),$this->get_marca(),$this->get_costo(),$this->get_precioa(),$this->get_preciob(),$this->get_precioc()); return $this->get_id_producto();
}else{
return false;
}
}else{
$sql=sprintf("SELECT id_producto FROM productos WHERE id_producto=%d",$this->get_id_producto()); $sql=sprintf("UPDATE productos SET producto='%s',descripcion='%s',categoria='%s',marca='%s',costo='%s',precioa='%s',preciob='%s',precioc='%s' WHERE id_producto=%d",$this->get_producto(),$this->get_descripcion(),$this->get_categoria(),$this->get_marca(),$this->get_costo(),$this->get_precioa(),$this->get_preciob(),$this->get_precioc()); return $this->get_id_producto();
}else{
return false;
}
}else{
$this->set_id_producto("");
$this->guardar();
}
}
}
//Creo la funcion destructora que desconecta de la base
function __destruct(){
}
}
?>
Gracias! Para que no lean todo el problema creo que lo tengo en el formulario, en la parte de ajax