Tengo un pequeño problema con la función jquery $ .ajax ().
Tengo un formulario donde cada clic en el botón de opción o selección del menú desplegable crea una variable de sesión con el valor seleccionado.
Ahora - tengo uno de los menús desplegables que tienen 4 opciones - el primero (con etiqueta Ninguno) tiene un valor = "" otros tienen sus ID.
Lo que quiero que suceda es la opción Ninguno (con valor en blanco) para eliminar la sesión y otra para crear una, pero solo si la sesión con este nombre de selección específico no existe, ya que todas las demás opciones tienen la misma cantidad asignada. - solo indica cuál fue seleccionado.
No estoy seguro de si eso tiene sentido, pero eche un vistazo al código, tal vez esto lo aclare:
$("#add_ons select").change(function() {
// get current price of the addons
var order_price_addon = $(".order_price_addon").text();
// get price of the clicked radio button from the rel attribute
var add = $(this).children('option').attr('label');
var name = $(this).attr('name');
var val = $(this).val();
if(val == "") {
var price = parseInt(order_price_addon) - parseInt(add);
removeSession(name);
} else {
if(isSession(name) == 0) {
var price = parseInt(order_price_addon) + parseInt(add);
}
setSession(name, val);
}
$(".order_price_addon").html(price);
setSession('order_price_addon', price);
updateTotal();
});
así que, en primer lugar, cuando el menú de selección #add_ons activa "cambio", obtenemos algunos valores de algunos elementos para los cálculos.
obtenemos el atributo de etiqueta de la opción de nuestra selección que almacena el valor a agregar al total, nombre de la selección para crear sesión con este nombre y valor para luego verificar cuál fue seleccionada.
ahora - verificamos si val == "" (lo que indicaría que se ha seleccionado la opción Ninguno) y deducimos la cantidad del total, además de eliminar la sesión con el nombre de la selección.
Después de esto es donde comienza el problema - declaración else.
De lo contrario, queremos verificar si la función isSession () con el nombre de nuestro selector devuelve 0 o 1; si devuelve 0, agregamos al total el valor almacenado en el atributo de etiqueta, pero si devuelve 1, eso sugeriría esa sesión ya existe, entonces solo cambiamos el valor de esta sesión recreándola, pero la cantidad no se le agrega.
Ahora la función isSession se ve así:
function isSession(selector) {
$.ajax({
type: "POST",
url: '/order.html',
data: ({ issession : 1, selector: selector }),
dataType: "html",
success: function(data) {
return data;
},
error: function() {
alert('Error occured');
}
});
}
Ahora, el problema es que no sé si el uso de "return" devolverá el resultado de la función, ya que no parece funcionar, sin embargo, si pongo los "datos" en la sección éxito: en la alerta: parece devolver el valor correcto.
¿Alguien sabe cómo devolver el valor de la función y luego compararlo en la siguiente declaración?
Gracias chicos, lo he probado de la siguiente manera:
function isSession(selector) {
$.ajax({
type: "POST",
url: '/order.html',
data: ({ issession : 1, selector: selector }),
dataType: "html",
success: function(data) {
updateResult(data);
},
error: function() {
alert('Error occured');
}
});
}
luego la función updateResult ():
función updateResult (datos) {resultado = datos; }
resultado - es la variable global - que luego estoy tratando de leer:
$("#add_ons select").change(function() {
// get current price of the addons
var order_price_addon = $(".order_price_addon").text();
// get price of the clicked radio button from the rel attribute
var add = $(this).children('option').attr('label');
var name = $(this).attr('name');
var val = $(this).val();
if(val == "") {
var price = parseInt(order_price_addon) - parseInt(add);
removeSession(name);
} else {
isSession(name);
if(result == 0) {
var price = parseInt(order_price_addon) + parseInt(add);
}
setSession(name, val);
}
$(".order_price_addon").html(price);
setSession('order_price_addon', price);
updateTotal();
});
pero por alguna razón, no funciona, ¿alguna idea?