代码之家  ›  专栏  ›  技术社区  ›  nickf

通过Ajax发布空值

  •  14
  • nickf  · 技术社区  · 15 年前

    使用jquery $.post 函数,如果发送 null 值,它到达服务器端作为 "null" . 例子:

    Javascript:

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

    PHP:

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

    我理解为什么会这样,但我想知道绕过限制的最佳方法吗?你应该:

    1. 在发送JS中的所有变量并替换为空字符串之前,是否先循环这些变量?
    2. 解读 “空” 作为 无效的 在服务器端?
    3. 根本不发送变量?
    4. 还有别的吗?
    5 回复  |  直到 7 年前
        1
  •  14
  •   Matthew Flaschen    15 年前

    我会把它编码成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
  •  0
  •   Jon Weers    15 年前

    尝试将javascript对象转换为json,方法是:

    $.post('test.php', JSON.stringify({ foo : null }));
    
        3
  •  0
  •   helloandre    15 年前
    1. 这将不是一个好的性能主意,尤其是在涉及大量变量的情况下。
    2. 可能。这可以通过查找所有期望值来完成,并且忽略其他任何值。直接翻译 "null" -> null 如果接受用户输入可能会很危险。
    3. 这将导致未设置变量。可以使用!然后对该变量执行isset()。这是我的选择。

    如果您不想在JSON之间进行转换,我将使用选项3,并且不发送任何空变量,然后使用 if (!isset($_POST['my-var']))

        4
  •  0
  •   Tktorza    7 年前

    我只是有一个问题,我已经解决得更简单了,也许对你来说也是。 在php文件中,可以这样做

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

        5
  •  -1
  •   Serj Sagan    8 年前

    这是一个奇怪的解决方法 Dates 正确张贴 C# MVC :

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