我正在转换
javascript / PHP / ajax应用程序以使用jQuery来确保与Firefox以外的浏览器兼容.
我无法使用jQuery的ajax函数传递true,false和null值.
$.ajax ( { url : <server_url>,dataType: 'json',type : 'POST',success : receiveAjaxMessage,data: { valueTrue : true,valueFalse: false,valueNull : null } } );
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 ( <server_url>,{ valueTrue : true,valueNull : null } );
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 : <server_url>,data : JSON.stringify ( { valueTrue : true,valueNull : null } ) } );
var_dump(json_decode(file_get_contents('PHP://input'),true));
服务器输出:
array(3) { ["valueTrue"]=> bool(true) ["valueFalse"]=> bool(false) ["valueNull"]=> NULL }
解决方法
你会期待什么?您将这些值作为POST参数发送,这是简单的文本字符串.如果要进行类型安全传输,请使用某种编码,例如JSON. (这不是dataType所做的 – 指的是服务器的响应.)