2013-02-05 20 views
7

Ajax呼び出しでデータを送信しています。値の1つは、ブール値がFALSEに設定されています。 Ajaxによって呼び出されるPHPスクリプトでは常にTRUEと評価されます。何か案は? vote.phpでjQueryのajaxデータにブール値を送信する

$.ajax({ 
    type: "POST", 
    data: {photo_id: photo_id, 
      vote: 1, 
      undo_vote: false}, // This is the important boolean! 
    url: "../../build/ajaxes/vote.php", 
    success: function(data){ 
     console.log(data); 
    } 
}); 

、上記のAjaxで呼び出されたスクリプトは、私がブール値チェック:

if ($_POST['undo_vote'] == true) { 
    Photo::undo_vote($_POST['photo_id']); 
} else { 
    Photo::vote($_POST['photo_id'], $_POST['vote']); 
} 

をしかし$_POST['undo_vote'] == true条件が常に満たされます。

+5

あなたは 'もし($ _POSTを試してみました['undo_vote'] == 'true'){'? (JSONの文字列を渡して個々のプロパティをテストする前にサーバサイドで解析しない限り、リクエストパラメータが文字列として受け取られることを期待しています) – nnnnnn

+0

はい、変数は文字列として送信されます。文字列 "false"のテストは常にtrueです。 – showdev

+1

が正しいです。すべてのGET/POSTパラメータは文字列で、 '' false ''は真理値です。 –

答えて

12

投稿は単なるテキストであり、テキストはPHPで真と評価されます。速い修正は、falseの代わりにゼロを送ることです。あなたはまた、あなたの真のPHPを引用符で囲むこともできます。

if ($_POST['undo_vote'] == "true") { 
    Photo::undo_vote($_POST['photo_id']); 
} else { 
    Photo::vote($_POST['photo_id'], $_POST['vote']); 
} 

true/falseのテキストを渡すことができます。それがあなたが好むものなら。

+0

ブール値を0または1として送信するのは悪い習慣ですか?私は、いくつかのJSONエンコーディング、または何か他のタイプを強化するために行う必要がありますか? –

+0

あなたの答えは正しいですし、途中で動作します。ただ受け入れるのに8分必要です:) –

+0

@DonnyPそれは本当に味の問題です。ほとんどのプログラマーは、1と0がtrue/falseでどのように動作するかを知っていますが、これが使用されている場所によってはJSONを使用する方がより明確になる場合があります。 –

0
あなたが要求データ送信するJSON.stringify()を使用することができ

data : JSON.stringify(json)

をして、サーバー上でそれを解読:

$data = json_decode($_POST)

0

あなたは、PHPでそれをキャストundo_voteとタイプのための0と1を使用することができます。

JS側:

undo_vote: 0 // false 

サーバー側:

$undovote = (bool) $_POST['undo_vote']; // now you have Boolean true/false 

if($undovote) { 
    // True, do something 
} else { 
    // False, do something else 
} 
関連する問題