2016-06-14 9 views
0

Ich habe festgestellt, dass eine Variable in einem AJAX-Aufruf (jQuery) als Typ gesendet: boolean wurde als ein Typ interpretiert: Zeichenfolge auf der Serverseite (PHP). Hier ist ein Auszug aus meinem Code, um darzustellen, dass:Ajax Aufruf: gesendet boolean interpretiert als Zeichenfolge in PHP

Ajax-Aufruf:

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

Wenn ich testen Sie die ref Variablentyp in meinem JS-Skript:

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

Wenn ich testen Sie die $_POST['ref'] Geben Sie mein PHP-Skript ein:

Gibt es eine Möglichkeit zu senden/rec ept eine boolesche Variable? Oder muss ich die Variable in das PHP-Skript umwandeln? Ich könnte etwas verpasst haben ...

+3

Sie können keine Boolean senden, es ist eine HTTP-Anfrage. Sie müssen in Ihrem PHP-Skript casten. –

Antwort

1

Eine regelmäßige Post-Anfrage Körper (technisch gesprochen, eine x-www-form-urlencoded Nachricht) ist nichts als Text. Gerade Zahlen sind Text. Alles ist Text, denn am Ende das ist, was der Browser sendet und empfängt der Server:

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

nur eine Konvention holt für wahr/falsch und machen eine explizite Umwandlung in Ihrem serverseitigen Code:

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

Wenn Sie einen Wert auswählen eingestellt, dass PHP korrekt erkennen, wenn casting from string to boolean der Code einfacher bekommen:

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

Oder Sie können einfach lassen PHP tun all die harte Arbeit:

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

Alternativ können Sie Klartext verwenden, um eine serialisierte komplexe Datenstruktur zu übertragen, die komplexen Datentypen unterstützt und Codierer/Decodierer sowohl in Client- und Server-Plattformen. Eine typische Wahl ist JSON.

+0

Vielen Dank für diese klare Erklärung! Ich habe mich schließlich dazu entschieden, 'yes' /' no''string-Werte zu senden, um das Casting auf der Serverseite zu vermeiden. – wiltomap

0

Sie müssen die Variable in Ihrem PHP-Code umwandeln, weil die Daten in (eine) Zeichenkette umgewandelt und so wie sie gesendet werden.