Ich habe ein kleines Problem mit der Funktion jquery $ .ajax ().
Ich habe ein Formular, in dem jeder Klick auf das Optionsfeld oder jede Auswahl aus dem Dropdown-Menü eine Sitzungsvariable mit dem ausgewählten Wert erstellt.
Jetzt - ich habe eines der Dropdown-Menüs mit 4 Optionen - hat das erste (mit der Bezeichnung None) den Wert = "" andere haben ihre IDs.
Was ich tun möchte, ist die Option Keine (mit leerem Wert), um die Sitzung zu entfernen, und die andere, um eine zu erstellen, aber nur, wenn die Sitzung mit diesem bestimmten ausgewählten Namen noch nicht vorhanden ist - da allen anderen Optionen der gleiche Betrag zugewiesen ist - Es zeigt nur an, welches ausgewählt wurde.
Ich bin mir nicht sicher, ob das Sinn macht - aber schauen Sie sich den Code an - vielleicht wird dies klarer:
$("#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();
});
Also - zuerst, wenn das Auswahlmenü #add_ons "change" auslöst, erhalten wir einige Werte von einigen Elementen für Berechnungen.
Wir erhalten das Label-Attribut der Option aus unserer Auswahl, in der der Wert gespeichert wird, der zur Gesamtsumme hinzugefügt werden soll, den Namen der Auswahl, um eine Sitzung mit diesem Namen zu erstellen, und den Wert, um später zu überprüfen, welcher ausgewählt wurde.
Jetzt prüfen wir, ob der Wert == "" (was darauf hinweist, dass die Option Keine ausgewählt wurde) und ziehen den Betrag von der Gesamtsumme ab und entfernen die Sitzung mit dem Namen der Auswahl.
Danach beginnt das Problem - else-Anweisung.
Andernfalls möchten wir überprüfen, ob die Funktion isSession () mit dem Namen unseres Selektors 0 oder 1 zurückgibt. Wenn sie 0 zurückgibt, addieren wir den im label-Attribut gespeicherten Wert zur Gesamtsumme. Wenn sie jedoch 1 zurückgibt, würde dies nahe legen Diese Sitzung ist bereits vorhanden. Dann ändern wir den Wert dieser Sitzung nur, indem wir sie neu erstellen. Der Betrag wird jedoch nicht hinzugefügt.
Jetzt sieht die isSession-Funktion folgendermaßen aus:
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');
}
});
}
Nun - das Problem ist - dass ich nicht weiß, ob die Verwendung von "return" das Ergebnis der Funktion zurückgibt - da es nicht zu funktionieren scheint -, wenn ich die "Daten" in den Abschnitt "success:" in den Abschnitt " alert - es scheint den richtigen Wert zurückzugeben.
Weiß jemand, wie man den Wert von der Funktion zurückgibt und ihn dann in der nächsten Anweisung vergleicht?
Danke Jungs - ich habe es folgendermaßen versucht:
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');
}
});
}
dann die Funktion updateResult ():
Funktion updateResult (Daten) {Ergebnis = Daten; }}
Ergebnis - ist die globale Variable - die ich dann zu lesen versuche:
$("#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();
});
aber aus irgendeinem Grund - es funktioniert nicht - irgendeine Idee?