Проводка нулевых значений через AJAX - PullRequest
14 голосов
/ 15 июня 2010

Используя функцию jQuery $.post, если вы отправляете значение null, оно поступает на сторону сервера как "null".Пример:

Javascript:

$.post('test.php', { foo : null });

PHP:

var_dump($_POST['foo']); // string(4) "null"

Я понимаю, почему это так, но не знал, как лучше обойти ограничение?Если вы:

  1. Просмотрите все переменные в JS перед отправкой и замените их пустой строкой?
  2. Интерпретировать "null" как null на стороне сервера?
  3. Не отправлять переменную вообще?
  4. Что-то еще?

Ответы [ 5 ]

14 голосов
/ 15 июня 2010

Я бы закодировал его в 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
0 голосов
/ 03 января 2018

У меня просто была эта проблема, которую я решил более просто, может быть, для вас это тоже будет.В своем php файле вы можете сделать это

if ($_POST[var] == 'null'){ $_POST[var] = NULL; }

0 голосов
/ 10 октября 2016

Это странное исправление, заставляющее Dates правильно отправлять сообщения в C# MVC:

$.post(url, JSON.parse(JSON.stringify({ ListOfObjWithDates: listOfObjWithDates })), ...
0 голосов
/ 15 июня 2010
  1. Это не будет хорошей идеей производительности, особенно если задействованы большие наборы переменных.
  2. Возможно.Это может быть сделано путем поиска всех ожидаемых значений и игнорирования чего-либо еще.прямой перевод "null" -> null может быть опасен, если принимать пользовательский ввод.
  3. Это приведет к тому, что переменная не будет установлена.тогда было бы возможно использовать! isset () для этой переменной.Это был бы мой выбор.

Если вы не хотите выполнять преобразование между JSON, я бы использовал вариант 3 и просто не отправлял переменные, которые являются нулевыми, тогда используйте if (!isset($_POST['my-var']))

0 голосов
/ 15 июня 2010

Попробуйте преобразовать объект javascript в JSON с помощью:

$.post('test.php', JSON.stringify({ foo : null }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...