Mam mały problem z funkcją jquery $ .ajax().jquery - wartość zwracana za pomocą wyniku ajaxowego na sukces
Mam formularz, w którym każde kliknięcie przycisku opcji lub menu rozwijanego tworzy zmienną sesji z wybraną wartością.
Teraz - Mam jedno z menu rozwijanych, które ma 4 opcje - pierwsza (z etykietą Brak) ma wartość = "" inne mają ich identyfikatory.
Co chcę zrobić, to opcja Brak (z pustą wartością), aby usunąć sesję i inną, aby utworzyć sesję, ale tylko wtedy, gdy sesja o tej konkretnej nazwie wyboru jeszcze nie istnieje - ponieważ wszystkie inne opcje mają takie same kwota do niego przypisana - wskazuje tylko, który z nich został wybrany.
Nie jestem pewien, czy to ma sens - ale rzucić okiem na kod - może to będzie to jaśniej:
$("#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();
});
więc - przede wszystkim gdy #add_ons wybierz menu powoduje zmianę” "otrzymujemy pewne wartości z kilku elementów do obliczeń.
otrzymamy atrybut etykiety opcji z naszego wyboru, który przechowuje wartość, która ma zostać dodana do sumy, nazwę zaznaczenia, aby utworzyć sesję o tej nazwie i wartości, aby później sprawdzić, który z nich został wybrany.
teraz - sprawdzamy, czy wartość == "" (co wskazuje, że wybrano opcję Brak), odliczamy kwotę z sumy, a także usuwamy sesję z nazwą wyboru.
Po tym zaczyna się problem - instrukcja else.
Else - chcemy sprawdzić, czy funkcja isSession() z nazwą naszego selektora zwraca 0 lub 1 - jeśli zwraca 0, dodajemy do sumy wartość przechowywaną w atrybucie label, ale jeśli zwraca 1 - to sugeruje, że sesja już istnieje - wtedy zmieniamy wartość tej sesji tylko poprzez jej odtworzenie - ale kwota nie jest do niej dodawana.
funkcjaTeraz 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 - problemem jest to - że nie wiem, czy za pomocą „zwrot” zwróci wynik z funkcji - jak to nie wydaje się pracować - jeśli jednak umieściłem "dane" w sukcesie: sekcja w alarmie - wydaje się, że 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 - Próbowałem go 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');
}
});
}
wtedy updateResult() funkcja:
funkcja updateResult (data) {result = dane; }
wynik - to zmienna globalna - co ja wtedy próbuje 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ł?
możliwe duplikat [Jak zwrócić odpowiedź z AJAX zadzwonić?] (http://stackoverflow.com/questions/14220321/how-to-return--response-od-an-ajax-call) – Bergi
'Mam mały problem z jquery ....' Jest to najdłuższy mały problem Widziałem kiedykolwiek ...;) – prageeth