Mam mały problem z funkcją jquery $ .ajax ().
Mam formularz, w którym każde kliknięcie przycisku opcji lub wybór z menu rozwijanego tworzy zmienną sesji z wybraną wartością.
Teraz - mam jedno z menu rozwijanych, które ma 4 opcje - pierwsza z nich (z etykietą Brak) ma wartość = "", pozostałe mają swoje identyfikatory.
To, co chcę, to opcja Brak (z pustą wartością), aby usunąć sesję i inna, aby ją utworzyć, ale tylko wtedy, gdy sesja o tej konkretnej nazwie wyboru jeszcze nie istnieje - ponieważ wszystkie inne opcje mają przypisaną tę samą ilość - wskazuje tylko, który z nich został wybrany.
Nie jestem pewien, czy to ma sens - ale spójrz na kod - być może to wyjaśni to:
$("#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();
});
a więc - przede wszystkim, gdy menu #add_ons select wywołuje „zmianę”, otrzymujemy do obliczeń pewne wartości z kilku elementów.
otrzymujemy atrybut label opcji z naszego select, który przechowuje wartość, która ma zostać dodana do sumy, nazwę selekcji do utworzenia sesji o tej nazwie i wartość, aby później sprawdzić, która z nich została wybrana.
teraz - sprawdzamy czy val == "" (co wskazywałoby, że wybrano opcję None) i odejmujemy kwotę od sumy jak również usuwamy sesję z nazwą selekcji.
Po tym zaczyna się problem - instrukcja else.
W przeciwnym razie - chcemy sprawdzić, czy funkcja isSession () o nazwie naszego selektora zwraca 0 czy 1 - jeśli zwraca 0 to dodajemy do sumy wartość przechowywaną w atrybucie label, ale jeśli zwraca 1 - to by sugerowało ta sesja już istnieje - wtedy zmienimy wartość tej sesji tylko poprzez jej odtworzenie - ale kwota nie zostanie do niej dodana.
Teraz funkcja isSession wygląda następująco:
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');
}
});
}
Teraz - problem polega na tym, że nie wiem, czy użycie "return" zwróci wynik funkcji - bo wydaje się, że nie działa - jeśli jednak wstawię sekcję "data" w success: do alert - wydaje się zwracać właściwą wartość.
Czy ktoś wie, jak zwrócić wartość z funkcji, a następnie porównać ją w następnej instrukcji?
Dzięki chłopaki - wypróbowałem to w następujący sposób:
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');
}
});
}
następnie funkcja updateResult ():
funkcja updateResult (dane) {wynik = dane; }
wynik - to zmienna globalna - którą następnie próbuję odczytać:
$("#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();
});
ale z jakiegoś powodu - nie działa - jakiś pomysł?