2013-02-05 18 views
7

Sto inviando alcuni dati in una chiamata Ajax. Uno dei valori è un booleano impostato su FALSE. Viene sempre valutato come TRUE nello script PHP chiamato da Ajax. Qualche idea?Invia un valore booleano in jQuery dati 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); 
    } 
}); 

Nel vote.php, lo script che è stato chiamato nel sopra Ajax, verifico il valore booleano:

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

Ma la condizione $_POST['undo_vote'] == true è sempre incontrato.

+5

Hai provato 'if ($ _POST ['undo_vote'] == 'true') {'? (Mi aspetto che i parametri di richiesta vengano ricevuti come stringhe a meno che non passi una stringa di JSON e la analizzi sul lato server prima di testare le singole proprietà.) – nnnnnn

+0

Sì, le variabili vengono registrate come stringhe. Il test per la stringa "false" è sempre vero. – showdev

+1

n è giusto. Tutti i parametri GET/POST sono stringhe e '" false "' è un valore di verità. –

risposta

12

Un post è solo testo e il testo verrà valutato come true in php. Una soluzione rapida sarebbe quella di inviare uno zero anziché un falso. Puoi anche inserire virgolette sul tuo vero in PHP.

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

Quindi è possibile passare il testo vero/falso. Se è quello che preferisci.

+0

È una cattiva pratica inviare i booleani come 0 o 1? Dovrei fare qualche codifica JSON, o qualcos'altro per rendere il tipo più forte? –

+0

La tua risposta è corretta e funziona a proposito, bastano 8 minuti per accettare :) –

+0

@DonnyP È davvero una questione di gusti. La maggior parte dei programmatori sa come funzionano 1 e 0 per vero/falso, ma a seconda di dove viene utilizzato potrebbe essere più chiaro usare JSON. –

0

È possibile utilizzare JSON.stringify() per inviare richiesta di dati:

data : JSON.stringify(json)

e decodificarlo sul server:

$data = json_decode($_POST);

0

È possibile utilizzare 0 e 1 per undo_vote e digitare gettarlo in php:

JS lato:

undo_vote: 0 // false 

lato server:

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

if($undovote) { 
    // True, do something 
} else { 
    // False, do something else 
}