J'ai un petit problème avec jQuery $.ajax()
fonction.
J'ai un formulaire où chaque clic sur le bouton radio ou la sélection dans le menu déroulant crée une variable de session avec la valeur sélectionnée.
Maintenant - j'ai un des menus déroulants qui a 4 options - la première (avec l'étiquette None) a un value=""
les autres ont leurs identifiants.
Ce que je veux, c'est que l'option None (avec une valeur vide) supprime la session et que l'autre en crée 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 leur est attribué - cela indique simplement laquelle a été sélectionnée.
Je ne suis pas sûr que cela ait un sens - mais jetez un coup d'œil au code - peut-être que cela sera 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 #add_ons
le menu de sélection déclenche "changer" nous obtenons quelques valeurs de quelques éléments pour les calculs.
nous récupérons l'attribut label de l'option de notre sélection qui stocke la valeur à ajouter au total, le nom de la sélection pour créer une session avec ce nom et cette valeur pour vérifier plus tard laquelle a été sélectionnée.
maintenant - nous vérifions si le val == ""
(ce qui indiquerait qu'aucune option n'a été sélectionnée) et nous déduisons le montant du total ainsi que nous supprimons la session avec le nom de la personne sélectionnée.
C'est après cela que le problème commence - else
déclaration.
Else - nous voulons vérifier si le isSession()
avec le nom de notre sélecteur renvoie 0 ou 1 - si elle renvoie 0 alors nous ajoutons au total la valeur stockée dans l'attribut label, mais si elle renvoie 1 - ce qui suggérerait que la session existe déjà - alors nous ne changeons la valeur de cette session qu'en la recréant - mais le montant ne lui est pas ajouté.
Maintenant 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'on peut utiliser return
renverra le résultat de la fonction - car cela ne semble pas fonctionner - cependant, si je mets les "données" de la section "success :" dans le champ alert()
- il semble renvoyer la bonne valeur.
Quelqu'un sait-il comment retourner la valeur de la fonction et la comparer ensuite dans l'instruction suivante ?
Merci les gars - J'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');
}
});
}
alors le updateResult()
fonction :
function updateResult(data) {
result = data;
}
result
- est la variable globale - que j'essaie ensuite 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 - cela ne fonctionne pas - une idée ?
0 votes
Duplicata possible de Comment retourner la réponse d'un appel AJAX ?
0 votes
Cela peut aider à résoudre ce problème : stackoverflow.com/questions/14220321/