我正在将javascript / php / ajax应用程序转换为使用jQuery,以确保与Firefox以外的浏览器兼容。
我在使用jQuery的ajax函数传递true,false和null值时遇到麻烦。
JavaScript代码:
$.ajax ( { url : <server_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)与上面给出的不工作代码进行比较。
ajaxPort.send ( <server_url>, { valueTrue : true, valueFalse: false, 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值。
还要注意,在第二种方法中,PHP代码中未使用$ _POST数组。我认为这是解决问题的关键,但是我找不到使用jQuery复制此行为的方法。
接受以下答案后,添加了本节。
这是原始代码的更正版本。
$.ajax ( { url : <server_url>, dataType: 'json', type : 'POST', success : receiveAjaxMessage, data : JSON.stringify ( { valueTrue : true, valueFalse: false, valueNull : null } ) } );
您会期待什么?您将此值作为POST参数发送,这些参数是简单的文本字符串。如果要进行类型安全的传输,请使用某种编码,例如JSON。(这不是做什么的,dataType而是指服务器的响应。)
dataType