11

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

$.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 で呼び出されるスクリプト、vote.php で、ブール値を確認します。

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

しかし、$_POST['undo_vote'] == true条件は常に満たされています。

4

3 に答える 3

15

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

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

次に、真/偽のテキストを渡すことができます。それがあなたの好みなら。

于 2013-02-05T21:01:35.897 に答える
2

JSON.stringify() を使用してリクエスト データを送信できます。

data : JSON.stringify(json)

サーバーでデコードします。

$data = json_decode($_POST);

于 2016-08-12T07:10:04.030 に答える
2

undo_vote に 0 と 1 を使用し、php で型キャストできます。

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 
}
于 2016-10-13T09:56:40.277 に答える