通过AJAX发布空值

时间:2010-06-15 04:35:54

标签: javascript jquery ajax post

使用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 个答案:

答案 0 :(得分:14)

我会把它编码成JSON。

E.g:

$.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

答案 1 :(得分:0)

尝试使用以下命令将javascript对象转换为JSON:

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

答案 2 :(得分:0)

  1. 这不是一个好的表现想法,特别是如果涉及大量的变量。
  2. 可能。这可以通过查找所有预期值并忽略其他任何值来完成。如果接受用户输入,直接翻译"null" -> null可能会很危险。
  3. 这将导致未设置变量。那么就可以在该变量上使用!isset()。这将是我的选择。
  4. 如果你不想在JSON之间进行转换,我会使用选项3而不是发送任何null的变量,然后使用if (!isset($_POST['my-var']))

答案 3 :(得分:0)

我刚遇到这个问题,我已经解决得更简单了,也许对你来说也是如此。 在您的PHP文件中,您可以这样做

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

答案 4 :(得分:-1)

这是让DatesC# MVC中正确发布的奇怪解决方法:

$.post(url, JSON.parse(JSON.stringify({ ListOfObjWithDates: listOfObjWithDates })), ...