2016-06-14 12 views
0

AJAX呼び出し(jQuery)でtype:booleanとして送信された変数が、サーバー側(PHP)のtype:stringとして解釈されています。ここではそれを説明するために私のコードの抜粋は、次のとおりです。Ajax呼び出し:PHPで文字列として解釈されたブール値

Ajax呼び出し:私は$_POST['ref']をテストする場合

var ref_type = jQuery.type(ref); 
alert(ref_type); 
// Result : boolean 

$.ajax({ 
    url : 'model/script.php', 
    type : 'POST', 
    data : ref, 
    success : function (data){ 
     ... 
    } 
}); 

私は私のJSスクリプトでref変数の型をテストする場合私のPHPスクリプトで入力してください:

if(isset($_POST['ref'])){ 
    echo gettype($_POST['ref']); 
} 
// Result : string 

送信/受信する方法はありますかブール変数をept?または、PHPスクリプトで変数をキャストする必要がありますか?私は何かを逃したかもしれません...

+3

ブール値を送信できません。これはHTTP要求です。 PHPスクリプトにキャストする必要があります。 –

答えて

1

通常の投稿要求本文(技術的には、x-www-form-urlencodedメッセージ)はテキストだけです。偶数はテキストです。

Name=John%20Smith&Age=35&Subscribed=true 

をジャスト真/偽のための規則を選択して、サーバー側のコードで明示的な変換を行います:最後に、これは、ブラウザが送信すると、サーバーが受信するものであるため、すべては、テキストである

switch ($_POST['ref']) { 
    case 'yeah': 
     $ref = true; 
     break; 
    case 'nope': 
     $ref = false; 
     break; 
    default: 
     $ref = null; 
} 

あなたはcasting from string to booleanコードを取得することができたときにPHPが正しく認識されるように設定した値を選択した場合に簡単:

$ref = (bool)$_POST['ref']; 

それとも、ただPHPは、すべてのハードワークをやらせることができます:

$ref = filter_input(INPUT_POST, 'ref', FILTER_VALIDATE_BOOLEAN); 

代わりに、複雑なデータ型をサポートし、クライアントとサーバーのプラットフォームの両方のエンコーダ/デコーダを持っているシリアル化された複雑なデータ構造を送信するために、プレーンテキストを使用することができます。典型的な選択はJSONです。

+0

この明快な説明をありがとう!私は最終的にサーバ側でのキャストを避けるために '' yes''/'' no'''の文字列を送ることを選択しました。 – wiltomap

0

データは(1つの)文字列に変換され、それとして送信されるので、あなたのPHPコードで変数をキャストする必要があります。

関連する問題