Jquery $ .ajax () işleviyle ilgili küçük bir sorunum var.
Radyo düğmesine her tıklamanın veya açılır menüden yapılan seçimin seçilen değere sahip bir oturum değişkeni oluşturduğu bir formum var.
Şimdi - 4 seçeneğe sahip açılır menülerden birine sahibim - ilki (Yok etiketli) bir değere sahip = "" diğerinin kimlikleri var.
Olmasını istediğim şey, Oturumu kaldırmak ve diğerini oluşturmak için Yok seçeneğine (boş değerle), ancak yalnızca bu belirli adla oturum mevcut değilse - diğer tüm seçeneklere aynı miktar atanmış olduğundan - sadece hangisinin seçildiğini gösteriyor.
Bunun mantıklı olup olmadığından emin değilim - ama koda bir göz atın - belki bu daha açık hale getirecektir:
$("#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();
});
so - her şeyden önce #add_ons seçme menüsü "değiştir" i tetiklediğinde, hesaplamalar için birkaç öğeden bazı değerler alırız.
Toplama eklenecek değeri depolayan seçeneğimizin label niteliğini, bu adla oluşturmak için select oturumunun adını ve daha sonra hangisinin seçildiğini kontrol etmek için değeri alırız.
şimdi - val == "" (Hiçbiri seçeneğinin seçildiğini gösterir) kontrol ediyoruz ve miktarı toplamdan düşüyoruz ve ayrıca select adıyla oturumu kaldırıyoruz.
Bundan sonra sorunun başladığı yer - else ifadesi.
Aksi takdirde - seçicimizin adıyla isSession () işlevinin 0 mı yoksa 1 mi döndürdüğünü kontrol etmek istiyoruz - 0 döndürürse, etiket özelliğinde depolanan toplam değeri ekleriz, ancak 1 döndürürse - bu önerecektir bu oturum zaten var - o zaman bu oturumun değerini yalnızca yeniden oluşturarak değiştiririz - ancak miktar buna eklenmez.
Şimdi isSession işlevi şuna benzer:
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');
}
});
}
Şimdi - sorun şu ki - "return" kullanmanın işlevden sonucu döndürüp döndürmeyeceğini bilmiyorum - işe yaramıyor gibi görünüyor - ancak, başarıdaki "verileri" bölüme koyarsam: uyarı - doğru değeri döndürüyor gibi görünüyor.
İşlevden değerin nasıl döndürüleceğini bilen ve sonraki ifadede onu karşılaştıran var mı?
Teşekkürler çocuklar - Bunu şu şekilde denedim:
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');
}
});
}
daha sonra updateResult () işlevi:
function updateResult (veri) {sonuç = veri; }
sonuç - daha sonra okumaya çalıştığım küresel değişkendir:
$("#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();
});
ama nedense - işe yaramıyor - herhangi bir fikir?