2016-06-14 3 views
0

Я заметил, что переменная, посланная в вызове AJAX (jQuery), как тип: boolean интерпретировалась как строка типа на стороне сервера (PHP). Вот выдержка из моего кода, чтобы показать, что:Ajax call: sent boolean интерпретируется как строка в php

Ajax вызов:

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

Если я проверить ref тип переменной в моем JS скрипт:

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

Если я испытываю $_POST['ref'] введите в моем скрипте PHP:

if(isset($_POST['ref'])){ 
    echo gettype($_POST['ref']); 
} 
// Result : string 

Есть ли способ отправить/повторно ept булева переменная? Или мне нужно включить переменную в PHP-скрипт? Возможно, я что-то пропустил ...

+3

Вы не можете отправить логическое значение, это HTTP-запрос. Вы должны бросить в свой PHP-скрипт. –

ответ

1

Регулярное почтовое отправление кузова (технически говоря, сообщение x-www-form-urlencoded) - не что иное, как текст. Даже цифры - это текст. Все тексты, потому что в конце концов, это то, что браузер посылает и сервер получает:

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

Просто выберите соглашение для истина/ложь и сделать явное преобразование в вашем Серверный код:

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

Если выбрать значение, установленное, что PHP распознает правильно, когда casting from string to boolean код может получить проще:

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

Или вы можете просто позволить PHP делать всю тяжелую работу:

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

В качестве альтернативы, вы можете использовать обычный текст для передачи сериализованной сложной структуры данных, которая поддерживает сложные типы данных и имеет кодер/декодер, как в клиентских и серверных платформах. Типичным выбором является JSON.

+0

Большое спасибо за это четкое объяснение! В конце концов я решил отправить значения '' yes'/''no''string, чтобы избежать кастинга на стороне сервера. – wiltomap

0

Вам нужно указать переменную в свой PHP-код, потому что данные преобразуются в (одну) строку и отправляются как она.

Смежные вопросы