无法使用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中得到修复
我希望它发送查询参数作为valueNull =而不是valueNull = null这是我的经验。
如果您正在使用JSON进行REST,则仍需要为GETS发送查询参数,并且您不能将所有GETS转换为POSTS以解决此问题。