Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema inventario en AJAX

Estas en el tema de Problema inventario en AJAX en el foro de Frameworks JS en Foros del Web. Hola todos =D, les presento mi problema, estoy haciendo un sistema de venta e inventario. Tengo una seccion que permite agregar el nombre del producto ...
  #1 (permalink)  
Antiguo 20/08/2009, 21:37
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Problema inventario en AJAX

Hola todos =D, les presento mi problema, estoy haciendo un sistema de venta e inventario. Tengo una seccion que permite agregar el nombre del producto o el codigo de barras a la venta del momento. El problema que se me presenta es que quiero introducir el codigo de barras y que en la lista de productos aparezca su nombre asociado o aparezca un alert diciendo que el codigo de barras no existe, y si se agrega un producto colocar su nombre en la lista si esta almacenado en la base de detos o decir que este no existe en caso contrario. Quiero hacer esto sin recargar la pagina, ahi es donde entra AJAX, llamo a un script en php que revisa la base de datos el nombre que se le fue enviado por parametro o el codigo de barras se#alado, e imprime el nombre del producto o "" en caso de no encontrarlo. Despues tengo que ejecutar ciertas instrucciones segun el resultado del script, pero aun no tengo el resultado de la llamada asincrona. Quisiera saber como puedo hacer para obtener el resultado del script y luego hacer las comprobaciones. Aqui posteo mi codigo para que quede mas explicito el problema.

Código:
...
function venta_existe_producto (producto, tipo)
{
	var post; //Datos que seran pasados al archivo
	post="nombre="+producto+"&tipo="+tipo;
	var url="../inventario/verificarExistencia.php"; //Archivo a donde seran enviados los datos
	var xmlhttp=crearAjax(); //Se crea una instancia de la pagina
	if (xmlhttp==null) {
		alert("Su navegador no soporta AJAX");
		return;
	}
	xmlhttp.onreadystatechange = 
	function listo()
	{
		if (xmlhttp.readyState==4) { //La solicitud finalizo
			if (xmlhttp.status==200) { //Finalizo correctamente
				nombre=xmlhttp.responseText;
			}
			else { //Error
				nombre=-1;
			}
		}
	}
	xmlhttp.open ('POST', url, true); //Se abre la url solicitada
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xmlhttp.send (post); //Se envian los datos necesarios en caso de abrirse la url con el metodo POST
}

function venta_cantidad_valida (cantidad)
{
	if (cantidad.match(/^\d+$/)==null) {
		return false;
	}
	return true;
}

function venta_comprobar()
{
	venta_actualizar();
	var i;
	var error=false;
	var resultado;
	for (i=0; i<venta_num_entradas; i++) {
		venta_existe_producto(venta_nombre_producto[i], 1);
		if (nombre=="") {
			resultado=0;
		}
		else if (nombre==-1) {
			resultado=-1;
		}
		else {
			resultado=1;
		}
		if (resultado==0) {
			error=true;
			alert("Producto "+venta_nombre_producto[i]+" no existe");
		}
		else if (!venta_cantidad_valida(document.getElementById("cant"+i).value)) {
			error=true;
			alert("Cantidad de "+venta_nombre_producto[i]+": "+document.getElementById("cant"+i).value+" no es valida");
		}
	}
	return error;
}
...
Esta parte especifica del codigo, muestra cuando tengo ya la lista de productos y quiero hacer una ultima verificacion antes de enviarla. Vuelvo a revisar si el nombre existe (por si acaso el producto fue eliminado, en el intervalo de tiempo en que el objeto fue agregado a la lista y el momento en que se hace la venta) y si la cantidad del producto es valida (un natural). Si puedo arreglar esta ultima validacion ya lo de colocar el nombre asociado al codigo de barras o comprobar si existe el producto al momento de enviarlo a la lista, tendria la misma solucion.

Encantado de recibir ayuda en el tema
  #2 (permalink)  
Antiguo 21/08/2009, 09:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema inventario en AJAX

Lo que puedes hacer es cambiar la llamada de asíncrona a sincrona (aunque esto hara que se congele el navegador hasta recibir la respuesta) y así ejecutar las validaciones.

Otra opción es que llames a las funciones de validación luego de recibir la respuesta p.e.:
Código Javascript:
Ver original
  1. function listo()
  2.     {
  3.         if (xmlhttp.readyState==4) { //La solicitud finalizo
  4.             if (xmlhttp.status==200) { //Finalizo correctamente
  5.                 nombre=xmlhttp.responseText;
  6.                                 validaciones(); // Llamas a las validaciones
  7.             }

Saludos.
  #3 (permalink)  
Antiguo 21/08/2009, 10:22
 
Fecha de Ingreso: agosto-2009
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Problema inventario en AJAX

Gracias GatorV. Tenia problemas con la llamada sincrona, y por eso use la asincrona. Mi error era que definia la funcion onreadystatechange cuando hacia la llamada sincrona y nunca recibia respuesta. Pero ahora todo bien :D
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 07:35.