les variables booléennes posté par AJAX être traitées comme des chaînes à côté serveur
Qui suit est une partie de la fonctionnalité AJAX pour ajouter des classes et des packs de session panier:-
Le jquery partie
function addClassToCart(itemId)
{
addItemToCart(itemId,true);
}
function addPackToCart(itemId)
{
addItemToCart(itemId,false);
}
function addItemToCart(itemId,isClass)
{
$.post(url+"/ajax/add_cart", { operation: 'add_cart','isClass':isClass, 'itemId': itemId},
function(data)
{
if(data.success)
{
alert("item added to cart");
}
}, "json");
}
Le traitement de la requête AJAX php partie -
//Checking operation and other posted parameters
if($_POST['isClass'])
{
//Code to add class to session cart
}
else
{
//Code to add pack to session cart
}
La chose étrange
Peu importe si je passe true/false (par appel addClassToCart() et addPackToCart()), toujours le code pour ajouter une classe à la session panier exécute.
Si je mets de l'écho des déclarations là comme ceci:-
if($_POST['isClass'])
{
echo "see if condition ".$_POST['isClass'];
}
else
{
echo "see else condition ".$_POST['isClass'];
}
C'est la sortie:-
addClassToCart() see if condition true
addPackToCart() see if condition false
Mettre des conditions comme ça, dans le jquery, le code fonctionne cependant très bien:-
function addItemToCart(itemId,isClass)
{
if(isClass)
alert("is class");
else
alert("is pack");
}
Enfin, si j'modifier le code côté serveur pour cela:-
if($_POST['isClass'] === true)
{
echo "see if condition ".$_POST['isClass'];
}
else
{
echo "see else condition ".$_POST['isClass'];
}
Ce sont les sorties -
addClassToCart() see else condition true
addPackToCart() see else condition false
Pourquoi, donc, est la variable booléenne traitée comme une chaîne ici? Suis-je en train de faire quelque chose de mal dans l'affichage des paramètres?
Grâce,
Sandeepan
- Ce n'est certainement pas inattendu. Tout passait par
GET
ouPOST
de PHP sont des chaînes de caractères. - oui, je la vois maintenant... édité ma question titre
Vous devez vous connecter pour publier un commentaire.
Vous ne faites rien de mal en soi, c'est juste que, lorsqu'il est affiché, il ressemble à ceci:
PHP ne peut pas dire que le type de données est parce qu'il n'est pas passé, il est toujours juste une chaîne de publier des données, afin de la comparer à
"true"
pour faire vos vérifications, comme ceci:==
et que utiliser===
pour une bonne raison.$foo = (bool) $_POST['foo'];
'true'
et'false'
et réinitialiser ces valeurs à des valeurs booléennes. La chaîne'false'
jeté comme une valeur booléenne vrai. Découvrez us2.php.net/manual/en/language.types.boolean.php pour revoir la façon dont PHP convertit ces valeurs.Vous pouvez également utiliser la fonction filter_var avec filtre FILTER_VALIDATE_BOOLEAN. Selon la documentation de php, il
Donc la réception de paramètre POST va ressembler:
filter_var
, l'un de la souvent négligé parties du PHP.C'est un peu une vieille question, mais je suis surpris que personne n'a posté ici comme solution.
Juste utiliser des 1 et des 0 à la place du vrai et du faux lorsque vous êtes à la construction des requêtes ajax.
Lorsque vous faites un
==
comparaison, ils vont être interprété comme vrai/faux.JS:
PHP:
Personnellement, j'aime #2, qui va de pair avec Nick Craver de réponse.