J'ai un petit problème avec la fonction jquery $ .ajax ().
J'ai un formulaire où chaque clic sur le bouton radio ou sélection dans le menu déroulant crée une variable de session avec la valeur sélectionnée.
Maintenant - j'ai l'un des menus déroulants qui ont 4 options - le premier (avec l'étiquette Aucun) a une valeur = "" les autres ont leurs identifiants.
Ce que je veux, c'est que l'option Aucun (avec une valeur vide) pour supprimer la session et l'autre pour en créer une, mais seulement si la session avec ce nom de sélection spécifique n'existe pas déjà - car toutes les autres options ont le même montant qui lui est attribué - il indique simplement lequel a été sélectionné.
Je ne sais pas si cela a du sens - mais jetez un œil au code - peut-être que cela le rendra plus clair:
$("#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();
});
donc - tout d'abord, lorsque le menu de sélection #add_ons déclenche "changement", nous obtenons des valeurs de quelques éléments pour les calculs.
nous obtenons l'attribut label de l'option à partir de notre sélection qui stocke la valeur à ajouter au total, le nom de la session de sélection pour créer avec ce nom et cette valeur pour vérifier plus tard laquelle a été sélectionnée.
maintenant - nous vérifions si val == "" (qui indiquerait que l'option Aucun a été sélectionné) et nous déduisons le montant du total ainsi que supprimons la session avec le nom de la sélection.
Après c'est là que le problème commence - instruction else.
Sinon - nous voulons vérifier si la fonction isSession () avec le nom de notre sélecteur renvoie 0 ou 1 - si elle renvoie 0, nous ajoutons au total la valeur stockée dans l'attribut label, mais si elle renvoie 1 - cela suggérerait cette session existe déjà - alors nous ne modifions la valeur de cette session qu'en la recréant - mais le montant n'y est pas ajouté.
Maintenant, la fonction isSession ressemble à ceci:
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');
}
});
}
Maintenant - le problème est - que je ne sais pas si l'utilisation de "return" retournera le résultat de la fonction - car cela ne semble pas fonctionner - cependant, si je mets les "données" dans le succès: section dans le alert - il semble renvoyer la bonne valeur.
Est-ce que quelqu'un sait comment renvoyer la valeur de la fonction, puis la comparer dans l'instruction suivante?
Merci les gars - je l'ai essayé de la manière suivante:
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');
}
});
}
puis la fonction updateResult ():
function updateResult (données) {résultat = données; }
result - est la variable globale - que j'essaye alors de lire:
$("#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();
});
mais pour une raison quelconque - ça ne marche pas - une idée?