【发布时间】:2011-02-17 03:52:21
【问题描述】:
我正在转换一个 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)与上面给出的不工作代码进行比较。
Javascript 代码:
ajaxPort.send
(
<server_url>,
{
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 值。
另请注意,在第二种方法中,PHP 代码中没有使用 $_POST 数组。我认为这是问题的关键,但我找不到使用 jQuery 复制这种行为的方法。
此部分是在以下答案被接受后添加的。
这是原始代码的更正版本。
Javascript 代码:
$.ajax
(
{
url : <server_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
}
【问题讨论】:
-
我可能错了,但您的数据是有效的 JSON 格式吗?不应该将所有键/值都包含在 "" 中吗?它可能无法解决您的问题,但是如果您对数据进行字符串化并且只为空值传递一个空字符串,那么我认为它可能会起作用吗?我有一种感觉 jquery 正在将您的数据包装在“”中,因此您发送到服务器的值实际上是一个包含文本 null 的字符串,例如:“null”。
-
感谢 Danny 的回复,但我确信在 JSON 中可以不加引号地使用 true、false 和 null。请参阅 www.json.org。
-
你可能是对的,但我误解了你。在 Javascript 端对数据进行字符串化解决了这个问题。