У мене є невелика проблема з функцією 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 запускає "зміна", ми отримуємо деякі значення з кількох елементів для обчислень.
ми отримуємо атрибут мітки опції з нашого вибору, який зберігає значення, яке потрібно додати до загальної суми, ім'я вибору для створення сеансу з цим ім'ям та значення, щоб пізніше перевірити, який з них було вибрано.
тепер - ми перевіряємо, чи є 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');
}
});
}
Тепер - проблема полягає в тому, що я не знаю, чи повернення результату поверне результат від функції - оскільки це, здається, не працює - однак, якщо я вкажу «дані» в розділ успіху: попередження - воно, схоже, повертає потрібне значення.
Хтось знає, як повернути значення з функції, а потім порівняти її в наступному твердженні?
Дякую, хлопці - я спробував це наступним чином:
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 (дані) {результат = дані; }
результат - це глобальна змінна - яку я намагаюся прочитати:
$("#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();
});
але чомусь - це не працює - будь-яка ідея?