Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用jQuery AJAX将null传递给服务器。在服务器上接收到的值是字符串";空";_Jquery_Ajax_Null - Fatal编程技术网

无法使用jQuery AJAX将null传递给服务器。在服务器上接收到的值是字符串";空";

无法使用jQuery AJAX将null传递给服务器。在服务器上接收到的值是字符串";空";,jquery,ajax,null,Jquery,Ajax,Null,我正在将javascript/php/ajax应用程序转换为使用jQuery,以确保与Firefox以外的浏览器兼容 我在使用jQuery的ajax函数传递真、假和空值时遇到问题 Javascript代码: $.ajax ( { url : <server_url>, dataType: 'json', type : 'POST', success : receiveAjaxMessage, data:

我正在将javascript/php/ajax应用程序转换为使用jQuery,以确保与Firefox以外的浏览器兼容

我在使用jQuery的ajax函数传递真、假和空值时遇到问题

Javascript代码:

$.ajax
(
   {
      url     : <server_url>,
      dataType: 'json',
      type    : 'POST',
      success : receiveAjaxMessage,
      data:
      {
         valueTrue : true,
         valueFalse: false,
         valueNull : null
      }
   }
);
$.ajax
(
   {
      url     : <server_url>,
      dataType: 'json',
      type    : 'POST',
      success : receiveAjaxMessage,
      data    : JSON.stringify
      (
         {
            valueTrue : true,
            valueFalse: false,
            valueNull : null
         }
      )
   }
);
服务器输出:

array(3) {
  ["valueTrue"]=>
  string(4) "true"
  ["valueFalse"]=>
  string(5) "false"
  ["valueNull"]=>
  string(4) "null"
}
array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}
array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}
问题是null、true和false值正在转换为字符串

当前使用的Javascript AJAX代码正确地传递null、true和false,但仅在Firefox中有效

有人知道如何使用jQuery解决这个问题吗


下面是一些工作代码(不使用jQuery)与上面给出的不工作代码进行比较

Javascript代码:

ajaxPort.send
(
   <server_url>,
   {
      valueTrue : true,
      valueFalse: false,
      valueNull : null
   }
);
服务器输出:

array(3) {
  ["valueTrue"]=>
  string(4) "true"
  ["valueFalse"]=>
  string(5) "false"
  ["valueNull"]=>
  string(4) "null"
}
array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}
array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}
请注意,正确接收null、true和false值

还要注意,在第二种方法中,PHP代码中没有使用$\u POST数组。我认为这是问题的关键,但我找不到使用jQuery复制这种行为的方法


本节是在接受以下答案后添加的

这是原始代码的更正版本

Javascript代码:

$.ajax
(
   {
      url     : <server_url>,
      dataType: 'json',
      type    : 'POST',
      success : receiveAjaxMessage,
      data:
      {
         valueTrue : true,
         valueFalse: false,
         valueNull : null
      }
   }
);
$.ajax
(
   {
      url     : <server_url>,
      dataType: 'json',
      type    : 'POST',
      success : receiveAjaxMessage,
      data    : JSON.stringify
      (
         {
            valueTrue : true,
            valueFalse: false,
            valueNull : null
         }
      )
   }
);
服务器输出:

array(3) {
  ["valueTrue"]=>
  string(4) "true"
  ["valueFalse"]=>
  string(5) "false"
  ["valueNull"]=>
  string(4) "null"
}
array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}
array(3) {
  ["valueTrue"]=>
  bool(true)
  ["valueFalse"]=>
  bool(false)
  ["valueNull"]=>
  NULL
}

你会期待什么?您将此值作为POST参数发送,POST参数是简单的文本字符串。如果希望类型安全传输,请使用某种编码,例如JSON。(这不是
dataType
所做的-它指的是来自服务器的响应。)

我希望它以valueNull=而不是valueNull=null的形式发送查询参数,这是我的经验


如果您使用JSON执行REST,您仍然需要发送GETS的查询参数,并且您不能将所有get转换为POST来回避此问题。

对于遇到此问题的任何人,此错误在jQuery 1.8中已修复


您可以使用未定义的而不是空的

data: {
  valueTrue : true,
  valueFalse: false,
  valueNull : undefined
}

我可能错了,但您的数据有效吗?不是所有的键/值都应该包含在“”中吗?这可能无法解决您的问题,但是如果您对数据进行字符串化,并只传递空字符串作为空值,那么我认为它可能会起作用?我有一种感觉,jquery将您的数据包装在“”中,因此您发送给服务器的值实际上是一个包含文本null的字符串,如:“null”。感谢Danny的回复,但我确信在JSON中可以使用true、false和null。请看www.json.org。你可能是对的,但我误解了你。在Javascript端字符串化数据解决了这个问题。谢谢。将数据编码为JSON解决了这个问题。我误解了“数据类型”选项的用途。