Tengo una función de javascript que necesita hacer un cálculo numérico. Algunos de los números utilizados en este cálculo se almacenan en una base de datos, y diferirán dependiendo de cómo un usuario rellena un formulario en línea. Una vez que el usuario llena el formulario, harán clic en el botón CALCULAR. En este momento, en la función JS, me gustaría usar ajax para obtener valores de una base de datos que corresponda a algún otro valor elegido por el usuario.actualizar la variable de javascript con ajax en tiempo real
Para un ejemplo simple: hay 3 tamaños de camisetas, con diferentes precios basados en cada tamaño (almacenados en la base de datos). El usuario elige el tamaño y cuando hacen clic en CALCULAR, uso ajax para obtener el precio asociado con el tamaño que eligieron.
La pregunta es, quiero usar ajax para actualizar algunas variables que usaré más adelante en el script. La forma en que trato de hacerlo ahora no funciona, la variable en el script no se actualiza desde ajax, solo puedo acceder al valor de la base de datos dentro de la función success
de la llamada ajax. Entiendo que esto se debe a que ajax es asincrónico por naturaleza, y tarda un tiempo, esperando que los datos vuelvan del servidor, mientras la función continúa ejecutándose
En el siguiente ejemplo, la llamada ajax devuelve datos JSON , y tengo una función llamada isjson()
que prueba si la cadena devuelta es de hecho datos JSON.
código Ejemplo:
function calculate_cost(){
var price = 0;
var size = $('form#tshirt_form [name="size"] option:selected').val();
$.ajax({
url:'my_script.php',
type:'post',
data:'select=price&table=tshirts.prices&where=size = "' + size + '"',
success:function(data){
if(isjson(data)){
data = $.parseJSON(data);
data = data[0];
price = data['price'];
}else{
//display error getting data
}
}
});
// continue code for calculation
// this alert will display "0", but I want the price from the database in there
alert(price);
//perhaps do other ajax calls for other bits of data
//...
return final_price;
}
¿Alguien sabe cómo puedo lograr esto, la actualización de las variables con el Ajax en tiempo real ??
¡Muchas gracias!
** ** EDITAR
Gracias a todos por la ayuda, entiendo sobre Ajax ser asíncrono. Realmente me gustaría una respuesta donde no tenga que continuar el cálculo dentro de la función success
, porque mi problema real involucra muchos valores de bastantes tablas diferentes. También me gustaría poder ampliar el cálculo en el futuro sin que se vuelva demasiado intrincado. Si esto no es posible, tendré que vivir con eso. ;-)
** ** EDIT 2
OK, tenemos la respuesta: por supuesto que está justo en la parte superior de la página docs,: -/lo siento por eso. La propiedad async
en la llamada jQuery ajax. http://api.jquery.com/jQuery.ajax/
'de datos: 'query = precio de selección de tshirts.prices donde el tamaño = "' + tamaño + '"',' por favor, no hagas eso. ¿Qué pasa si 'data: 'query = drop table users'' – karim79
Espero que hagas algo de saneamiento mega-inteligente de la entrada' data: query = 'parte – bububaba
wow gracias, sí, podría ser catastrófico –