У меня небольшая проблема с функцией jquery $ .ajax ().
У меня есть форма, в которой каждый щелчок по переключателю или выбор из раскрывающегося меню создает переменную сеанса с выбранным значением.
Теперь - у меня есть одно из раскрывающихся меню, в котором есть 4 варианта - первый (с меткой None) имеет значение = "", у других их идентификаторы.
Я хочу, чтобы параметр «Нет» (с пустым значением) удалял сеанс, а другой - для его создания, но только в том случае, если сеанс с этим конкретным именем выбора еще не существует, поскольку для всех других параметров ему присвоено такое же количество - это просто указывает, какой из них был выбран.
Я не уверен, имеет ли это смысл, но взгляните на код - возможно, это прояснит:
$("#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();
});
Итак - во-первых, когда триггеры меню выбора #add_ons вызывают "изменение", мы получаем некоторые значения из нескольких элементов для расчетов.
мы получаем атрибут label опции из нашего select, в котором хранится значение, которое будет добавлено к итоговой сумме, имя select для создания сеанса с этим именем и значение, чтобы позже проверить, какой из них был выбран.
теперь - мы проверяем, был ли выбран параметр val == "" (который будет указывать на то, что опция None выбрана), и мы вычитаем сумму из общей суммы, а также удаляем сеанс с именем выбора.
После этого начинается проблема - оператор else.
Иначе - мы хотим проверить, возвращает ли функция isSession () с именем нашего селектора 0 или 1 - если она возвращает 0, мы добавляем к итоговому значению значение, хранящееся в атрибуте label, но если оно возвращает 1 - это предполагает этот сеанс уже существует - тогда мы изменяем значение этого сеанса только путем его воссоздания - но сумма к нему не добавляется.
Теперь функция isSession выглядит так:
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');
}
});
}
Теперь - проблема в том, что я не знаю, вернет ли использование «return» результат функции - поскольку это, похоже, не работает - однако, если я помещу «данные» в раздел success: в предупреждение - похоже, он возвращает правильное значение.
Кто-нибудь знает, как вернуть значение из функции, а затем сравнить его в следующей инструкции?
Спасибо, ребята - пробовал следующим образом:
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');
}
});
}
затем функция updateResult ():
функция updateResult (данные) {результат = данные; }
result - это глобальная переменная, которую я потом пытаюсь прочитать:
$("#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();
});
но по какой-то причине - не работает - есть идеи?