У меня есть небольшая проблема с функцией jquery $.ajax().
У меня есть форма, в которой каждый щелчок на переключателе или выборе в раскрывающемся меню создает переменную сеанса с выбранным значением.
Теперь - у меня есть одно из выпадающих меню, у которого есть 4 варианта - первый (с меткой Нет) имеет value = "", у других есть свои идентификаторы.
То, что я хочу сделать, это вариант 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.
Else - мы хотим проверить, возвращает ли функция isSession() имя нашего селектора 0 или 1 - если оно возвращает 0, то мы добавляем к сумме значение, сохраненное в атрибуте метки, но если оно возвращает 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 результат функции, поскольку он не работает, однако, если я положил "данные" в успех: раздел в предупреждение - он, кажется, возвращает правильное значение.
Кто-нибудь знает, как вернуть значение из функции, а затем сравнить его в следующем утверждении?
Спасибо, ребята, я пробовал это следующим образом:
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():
function updateResult (data) { result = data; }
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();
    });
но по какой-то причине - это не сработает - любая идея?