Ho un piccolo problema con la funzione jquery $ .ajax ().
Ho un modulo in cui ogni clic sul pulsante di opzione o selezione dal menu a discesa crea una variabile di sessione con il valore selezionato.
Ora - ho uno dei menu a discesa che hanno 4 opzioni - il primo (con etichetta Nessuno) ha un valore = "" altri hanno i loro ID.
Quello che voglio che accada è l'opzione Nessuna (con valore vuoto) per rimuovere la sessione e l'altra per crearne una, ma solo se la sessione con questo nome di selezione specifico non esiste già, poiché tutte le altre opzioni hanno lo stesso importo assegnato ad essa - indica solo quale è stato selezionato.
Non sono sicuro che abbia senso, ma dai un'occhiata al codice, forse questo lo renderà più chiaro:
$("#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();
});
quindi - prima di tutto quando il menu di selezione #add_ons attiva il "cambiamento" otteniamo alcuni valori da alcuni elementi per i calcoli.
otteniamo l'attributo label dell'opzione dalla nostra selezione che memorizza il valore da aggiungere al totale, il nome della selezione per creare la sessione con questo nome e il valore per verificare successivamente quale è stata selezionata.
ora - controlliamo se val == "" (che indicherebbe che è stata selezionata l'opzione Nessuno) e deduciamo l'importo dal totale e rimuoviamo la sessione con il nome della selezione.
Dopo questo è dove inizia il problema - istruzione else.
Altrimenti - vogliamo controllare se la funzione isSession () con il nome del nostro selettore restituisce 0 o 1 - se restituisce 0 allora aggiungiamo al totale il valore memorizzato nell'attributo label, ma se restituisce 1 - questo suggerirebbe quella sessione esiste già - quindi modifichiamo il valore di questa sessione solo ricreandola - ma l'importo non viene aggiunto.
Ora la funzione isSession ha questo aspetto:
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');
}
});
}
Ora - il problema è - che non so se l'uso di "return" restituirà il risultato dalla funzione - poiché non sembra funzionare - tuttavia, se metto i "dati" nella sezione success: nella avviso: sembra restituire il valore corretto.
Qualcuno sa come restituire il valore dalla funzione e quindi confrontarlo nell'istruzione successiva?
Grazie ragazzi, l'ho provato nel modo seguente:
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');
}
});
}
quindi la funzione updateResult ():
funzione updateResult (dati) {risultato = dati; }
risultato - è la variabile globale - che sto quindi cercando di leggere:
$("#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();
});
ma per qualche motivo - non funziona - qualche idea?