2013-02-05 9 views
7

Ich sende einige Daten in einem Ajax-Aufruf. Einer der Werte ist ein Boolscher Wert, der auf FALSE gesetzt ist. In dem von Ajax aufgerufenen PHP-Skript wird es immer als WAHR bewertet. Irgendwelche Ideen?Sendet einen booleschen Wert in jQuery ajax data

$.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); 
    } 
}); 

In vote.php, das Skript, das in der oben Ajax genannt wird, überprüfe ich den Booleschen Wert:

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

Aber die $_POST['undo_vote'] == true Bedingung ist immer erfüllt.

+5

Haben Sie versucht, 'if ($ _POST ['undo_vote'] == 'wahr') {'? (Ich erwarte, dass Anfrageparameter als Zeichenfolgen empfangen werden, es sei denn, Sie geben eine Zeichenfolge von JSON weiter und analysieren sie serverseitig, bevor Sie die einzelnen Eigenschaften testen.) – nnnnnn

+0

Ja, Variablen werden als Zeichenfolgen bereitgestellt. Das Testen auf die Zeichenfolge "false" ist immer wahr. – showdev

+1

n ist richtig. Alle GET/POST-Parameter sind Zeichenfolgen und "false" ist ein truthy-Wert. –

Antwort

12

Ein Post ist nur Text, und Text wird in PHP als wahr ausgewertet. Eine schnelle Lösung wäre, eine Null anstelle von false zu senden. Sie könnten auch Zitate um Ihre wahren in PHP setzen.

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

Dann können Sie echte/falsche Text übergeben. Wenn Sie das bevorzugen.

+0

Ist es eine schlechte Übung, Booleans als 0 oder 1 zu senden? Sollte ich eine JSON-Codierung oder etwas anderes machen, um den Typ stärker zu machen? –

+0

Ihre Antwort ist korrekt und funktioniert nebenbei, brauchen nur 8 Minuten zu akzeptieren :) –

+0

@DonnyP Es ist wirklich eine Frage des Geschmacks. Die meisten Programmierer wissen, wie 1 und 0 für True/False funktionieren, aber je nachdem, wo diese verwendet werden, ist es möglicherweise einfacher, JSON zu verwenden. –

0

Sie können JSON.stringify() verwenden Anforderungsdaten zu senden:

data : JSON.stringify(json)

und dekodieren sie auf dem Server:

$data = json_decode($_POST);

0

Sie können 0 und 1 für undo_vote verwenden und es in PHP geworfen Typ:

JS Seite:

undo_vote: 0 // false 

Server-Seite:

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

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