2010-06-15 116 views
14

使用jQuery $.post函数,如果您发送null值,它会以"null"到达服务器端。例如:通过AJAX发布空值

的Javascript:

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

PHP:

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

我明白为什么会这样,但不知道来解决限制的最佳方式?你应该:

  1. 循环浏览JS中的所有变量,然后发送它们并替换为空字符串?
  2. 解释"null" as null在服务器端?
  3. 不要发送变量吗?
  4. 还有别的吗?

回答

13

我会把它编码成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

对于那些没有可以使用原生JSON对象这些浏览器[http://www.json.org/json2.js] – meouw 2010-06-15 06:54:24

0

尝试的JavaScript对象转换为JSON有:

$.post('test.php', JSON.stringify({ foo : null })); 
0
  1. 这不会是一个好的性能想法的想法,特别是如果涉及大量变量的话。
  2. 可能。这可以通过查找所有期望的值来完成,并忽略其他任何内容。直接翻译"null" -> null如果接受用户输入可能会很危险。
  3. 这会导致未设置变量。那么就可以在该变量上使用!isset()。这将是我的选择。

如果你不想有JSON之间的转换,我会使用选项3,根本无法发送空的任何变量,然后使用if (!isset($_POST['my-var']))

-1

这是一个奇怪的修复来获得Dates发布正确C# MVC

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

我只是有这个问题,我已经解决了更简单,也许你这会太。 在你的PHP文件,你可以做到这一点

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