以下は、クラスとパックをセッションカートに追加するAJAX機能の一部です。
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");
}
AJAXリクエスト処理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
}
奇妙なこと
(addClassToCart()およびaddPackToCart()を呼び出すことにより)true/falseを渡すかどうかに関係なく、常にセッションカートにクラスを追加するコードが実行されます。
私がこのようにエコーステートメントをそこに置くと:-
if($_POST['isClass'])
{
echo "see if condition ".$_POST['isClass'];
}
else
{
echo "see else condition ".$_POST['isClass'];
}
これは出力です:-
addClassToCart()see if condition true
addPackToCart()see if condition false
ただし、jqueryコードにこのような条件を設定すると正常に機能します。
function addItemToCart(itemId,isClass)
{
if(isClass)
alert("is class");
else
alert("is pack");
}
最後に、サーバー側のコードを次のように変更した場合:-
if($_POST['isClass'] === true)
{
echo "see if condition ".$_POST['isClass'];
}
else
{
echo "see else condition ".$_POST['isClass'];
}
これらは出力です-
addClassToCart()see else condition true
addPackToCart()see else condition false
では、ブール変数がここでは文字列として扱われるのはなぜですか?パラメータの投稿で何か問題がありますか?
ありがとう、Sandeepan
それ自体は何も間違っていません。投稿されたときに次のように表示されるだけです。
operation=add_cart&isClass=true&itemId=1234
渡されないため、PHPはデータ型を特定できません。これは常にPOSTデータの文字列なので、"true"
と比較してチェックを行います。この:
if($_POST['isClass'] === "true")
{
//Code to add class to session cart
}
else
{
//Code to add pack to session cart
}
また、filter_var関数をフィルターFILTER_VALIDATE_BOOLEANと共に使用することもできます。 PHPのドキュメントによると
「1」、「true」、「on」、「yes」に対してTRUEを返します。それ以外の場合はFALSEを返します。 FILTER_NULL_ON_FAILUREが設定されている場合、「0」、「false」、「off」、「no」、および「」に対してのみFALSEが返され、ブール値以外の値に対してはNULLが返されます。
したがって、POSTパラメータの受信は次のようになります。
$isClass = filter_var ($_POST['isClass'], FILTER_VALIDATE_BOOLEAN);
これは少し古い質問ですが、解決策としてここに誰も投稿していないことに驚いています。
Ajaxリクエストを作成する場合は、trueとfalseの代わりに1と0を使用してください。 ==
比較、それらはtrue/falseとして解釈されます。
JS:
$.ajax({
url: '....',
data: {
foo: 1,
bar: 0
}
});
PHP:
<?php
if ($_GET['foo']) {
//...
} else {
//...
}
echo $_GET['bar'] ? 'bar is true' : 'bar is false';
?>
個人的に私は#2が好きです。