Las variables booleanas publicadas a través de AJAX se tratan como cadenas en el lado del servidor
Lo siguiente es parte de una funcionalidad AJAX para agregar clases y paquetes al carrito de sesión: -
La parte jquery
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");
}
La solicitud de AJAX que procesa la parte php -
//Checking operation and other posted parameters
if($_POST['isClass'])
{
//Code to add class to session cart
}
else
{
//Code to add pack to session cart
}
Lo extraño
No importa si paso verdadero / falso (llamando a addClassToCart () y addPackToCart ()), siempre se ejecuta el código para agregar clase al carrito de sesión.
Si pongo declaraciones de eco así:
if($_POST['isClass'])
{
echo "see if condition ".$_POST['isClass'];
}
else
{
echo "see else condition ".$_POST['isClass'];
}
Esta es la salida: -
addClassToCart ()see if condition true
addPackToCart ()see if condition false
Sin embargo, poner condiciones como esta en el código jquery funciona bien: -
function addItemToCart(itemId,isClass)
{
if(isClass)
alert("is class");
else
alert("is pack");
}
Finalmente, si modifico el código del lado del servidor para esto: -
if($_POST['isClass'] === true)
{
echo "see if condition ".$_POST['isClass'];
}
else
{
echo "see else condition ".$_POST['isClass'];
}
Estas son las salidas:
addClassToCart ()see else condition true
addPackToCart ()see else condition false
Entonces, ¿por qué la variable booleana se trata como una cadena aquí? ¿Estoy haciendo algo mal al publicar los parámetros?
Gracias sandeepan