Saya punya masalah kecil dengan fungsi jquery $ .ajax ().
Saya memiliki formulir di mana setiap klik pada tombol radio atau pilihan dari menu tarik-turun membuat variabel sesi dengan nilai yang dipilih.
Sekarang - Saya memiliki salah satu menu tarik-turun yang memiliki 4 opsi - yang pertama (dengan label Tidak Ada) memiliki nilai = "" yang lain memiliki idnya.
Apa yang saya inginkan terjadi adalah pada opsi Tidak Ada (dengan nilai kosong) untuk menghapus sesi dan lainnya untuk membuatnya, tetapi hanya jika sesi dengan nama pilihan khusus ini belum ada - karena semua opsi lain memiliki jumlah yang sama yang ditetapkan padanya - itu hanya menunjukkan mana yang dipilih.
Saya tidak yakin apakah itu masuk akal - tetapi lihat kodenya - mungkin ini akan membuatnya lebih jelas:
$("#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();
});
jadi - pertama-tama ketika #add_ons menu pilih memicu "perubahan" kami mendapatkan beberapa nilai dari beberapa elemen untuk kalkulasi.
kami mendapatkan atribut label opsi dari pilihan kami yang menyimpan nilai yang akan ditambahkan ke total, nama yang dipilih untuk membuat sesi dengan nama ini dan nilai untuk kemudian memeriksa mana yang dipilih.
sekarang - kami memeriksa apakah val == "" (yang menunjukkan bahwa opsi Tidak Ada telah dipilih) dan kami mengurangi jumlah dari total serta menghapus sesi dengan nama yang dipilih.
Setelah ini masalah dimulai - pernyataan lain.
Lain - kami ingin memeriksa apakah fungsi isSession () dengan nama selektor kami mengembalikan 0 atau 1 - jika mengembalikan 0 maka kami menambahkan ke total nilai yang disimpan dalam atribut label, tetapi jika mengembalikan 1 - itu akan menyarankan sesi tersebut sudah ada - maka kami hanya mengubah nilai sesi ini dengan membuatnya kembali - tetapi jumlahnya tidak ditambahkan ke dalamnya.
Sekarang fungsi isSession terlihat seperti ini:
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');
}
});
}
Sekarang - masalahnya adalah - saya tidak tahu apakah menggunakan "return" akan mengembalikan hasil dari fungsi - karena tampaknya tidak berhasil - namun, jika saya meletakkan "data" di bagian yang berhasil: waspada - tampaknya mengembalikan nilai yang benar.
Adakah yang tahu bagaimana mengembalikan nilai dari fungsi dan kemudian membandingkannya di pernyataan berikutnya?
Thanks guys - Saya sudah mencobanya dengan cara berikut:
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');
}
});
}
lalu fungsi updateResult ():
function updateResult (data) {result = data; }
hasil - adalah variabel global - yang kemudian saya coba baca:
$("#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();
});
tetapi untuk beberapa alasan - tidak berhasil - ada ide?