ฉันมีปัญหาเล็กน้อยกับฟังก์ชัน jquery $ .ajax ()
ฉันมีแบบฟอร์มที่ทุกการคลิกบนปุ่มตัวเลือกหรือการเลือกจากเมนูแบบเลื่อนลงจะสร้างตัวแปรเซสชันพร้อมค่าที่เลือก
ตอนนี้ - ฉันมีหนึ่งในเมนูแบบเลื่อนลงซึ่งมี 4 ตัวเลือกเมนูแรก (ที่มีป้ายกำกับไม่มี) มีค่า = "" อื่น ๆ มีรหัส
สิ่งที่ฉันต้องการให้เกิดขึ้นคือตัวเลือกไม่มี (มีค่าว่าง) เพื่อลบเซสชันและอื่น ๆ เพื่อสร้างขึ้น แต่เฉพาะในกรณีที่ไม่มีเซสชันที่มีชื่อเลือกเฉพาะนี้อยู่แล้วเนื่องจากตัวเลือกอื่น ๆ ทั้งหมดมีจำนวนเท่ากันที่กำหนดให้ - เป็นเพียงการระบุว่ารายการใดถูกเลือก
ฉันไม่แน่ใจว่ามันสมเหตุสมผลหรือไม่ แต่ลองดูโค้ด - บางทีนี่อาจทำให้ชัดเจนขึ้น:
$("#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 select ทริกเกอร์ "เปลี่ยน" เราจะได้รับค่าบางอย่างจากองค์ประกอบบางอย่างสำหรับการคำนวณ
เราได้รับแอตทริบิวต์ป้ายกำกับของตัวเลือกจากการเลือกของเราซึ่งเก็บค่าที่จะเพิ่มลงในผลรวมชื่อของการเลือกเพื่อสร้างเซสชันด้วยชื่อและค่านี้เพื่อตรวจสอบในภายหลังว่ามีการเลือกอันใด
ตอนนี้ - เราตรวจสอบว่า val == "" (ซึ่งจะบ่งบอกว่าไม่มีตัวเลือกถูกเลือก) และเราหักจำนวนเงินออกจากยอดรวมและลบเซสชันที่มีชื่อของผู้เลือก
หลังจากนี้คือจุดเริ่มต้นของปัญหา - 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" จะส่งคืนผลลัพธ์จากฟังก์ชันหรือไม่เพราะดูเหมือนจะไม่ได้ผล - อย่างไรก็ตามหากฉันใส่ "data" ในความสำเร็จ: ส่วนใน การแจ้งเตือน - ดูเหมือนว่าจะคืนค่าที่ถูกต้อง
มีใครทราบวิธีการคืนค่าจากฟังก์ชันแล้วนำไปเปรียบเทียบในคำสั่งถัดไป
ขอบคุณ - ฉันได้ลองทำตามวิธีต่อไปนี้:
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 = data; }
ผลลัพธ์ - คือตัวแปรทั่วโลก - ซึ่งฉันพยายามอ่านแล้ว:
$("#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();
});
แต่ด้วยเหตุผลบางอย่าง - มันใช้ไม่ได้ - มีความคิดอย่างไร?