Публикация нулевых значений через AJAX
Используя функцию jQuery $.post
, если вы отправляете значение null
, оно приходит со стороны сервера как "null"
. Пример:
JavaScript:
$.post('test.php', { foo : null });
PHP:
var_dump($_POST['foo']); // string(4) "null"
Я понимаю, почему это так, но задавался вопросом, как лучше всего преодолеть ограничения? Если вы:
- Пропустите все переменные в JS, прежде чем отправлять их и заменить пустой строкой?
- Интерпретировать
"null"
как null
на стороне сервера?
- Не отправлять эту переменную вообще?
- Что-то еще?
Ответы
Ответ 1
Я бы закодировал его в JSON.
например:.
$.ajax({
url: 'test.php',
type: 'POST',
data: JSON.stringify({foo : null}),
contentType: "application/json",
success: function(data) {
// ...
}
});
Вы можете использовать json_decode
на сервере, и типы будут сохранены:
$msg = json_decode(file_get_contents("php://input"));
var_export($msg->foo); // NULL
Ответ 2
Попробуйте преобразовать объект javascript в JSON с помощью
$.post('test.php', JSON.stringify({ foo : null }));
Ответ 3
- Это не будет хорошей идеей производительности, особенно если задействованы большие группы переменных.
- Возможно. Это может быть сделано путем поиска всех ожидаемых значений и игнорирования чего-либо еще. прямой перевод
"null" -> null
может быть опасным при вводе пользователя.
- Это приведет к тому, что переменная не будет установлена. тогда можно было бы использовать! isset() для этой переменной. Это был бы мой выбор.
Если вы не хотите конвертировать между JSON, я бы использовал параметр 3 и просто не отправлял переменные, которые являются нулевыми, а затем используйте if (!isset($_POST['my-var']))
Ответ 4
У меня просто была эта проблема, которую я решил более просто, возможно, для вас это тоже будет.
В вашем php файле вы можете сделать это
if ($_POST[var] == 'null'){ $_POST[var] = NULL; }
Ответ 5
Это странное исправление, чтобы получить Dates
сообщение правильно в C# MVC
:
$.post(url, JSON.parse(JSON.stringify({ ListOfObjWithDates: listOfObjWithDates })), ...