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

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

我在使用jQuery的ajax函数传递true,false和null值时遇到问题。

Javascript代码:

$.ajax ( { url : , dataType: 'json', type : 'POST', success : receiveAjaxMessage, data: { valueTrue : true, valueFalse: false, valueNull : null } } ); 

PHP代码:

 var_dump($_POST); 

服务器输出:

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

问题是null,true和false值正在转换为字符串。

当前使用的Javascript AJAX代码正确传递null,true和false,但仅适用于Firefox。

有谁知道如何使用jQuery解决这个问题?


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

Javascript代码:

 ajaxPort.send ( , { valueTrue : true, valueFalse: false, valueNull : null } ); 

PHP代码:

 var_dump(json_decode(file_get_contents('php://input'), true)); 

服务器输出:

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

请注意,正确接收null,true和false值。

另请注意,在第二种方法中,$ _POST数组未在PHP代码中使用。 我认为这是问题的关键,但我找不到使用jQuery复制此行为的方法。


在接受以下答案后添加了此部分。

这是原始代码的更正版本。

Javascript代码:

 $.ajax ( { url : , dataType: 'json', type : 'POST', success : receiveAjaxMessage, data : JSON.stringify ( { valueTrue : true, valueFalse: false, valueNull : null } ) } ); 

PHP代码:

 var_dump(json_decode(file_get_contents('php://input'), true)); 

服务器输出:

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

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

您可以使用undefined而不是null

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

对于遇到这种情况的人来说,这个bug在jQuery 1.8中得到修复

https://github.com/jquery/jquery/pull/714

我希望它发送查询参数作为valueNull =而不是valueNull = null这是我的经验。

如果您正在使用JSON进行REST,则仍需要为GETS发送查询参数,并且您不能将所有GETS转换为POSTS以解决此问题。