无法使用jQuery AJAX将null传递给服务器。在服务器上接收到的值是字符串";空";
我正在将javascript/php/ajax应用程序转换为使用jQuery,以确保与Firefox以外的浏览器兼容 我在使用jQuery的ajax函数传递真、假和空值时遇到问题 Javascript代码:无法使用jQuery AJAX将null传递给服务器。在服务器上接收到的值是字符串";空";,jquery,ajax,null,Jquery,Ajax,Null,我正在将javascript/php/ajax应用程序转换为使用jQuery,以确保与Firefox以外的浏览器兼容 我在使用jQuery的ajax函数传递真、假和空值时遇到问题 Javascript代码: $.ajax ( { url : <server_url>, dataType: 'json', type : 'POST', success : receiveAjaxMessage, data:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data:
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
}
);
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data : JSON.stringify
(
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
)
}
);
服务器输出:
array(3) {
["valueTrue"]=>
string(4) "true"
["valueFalse"]=>
string(5) "false"
["valueNull"]=>
string(4) "null"
}
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
问题是null、true和false值正在转换为字符串
当前使用的Javascript AJAX代码正确地传递null、true和false,但仅在Firefox中有效
有人知道如何使用jQuery解决这个问题吗
下面是一些工作代码(不使用jQuery)与上面给出的不工作代码进行比较 Javascript代码:
ajaxPort.send
(
<server_url>,
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
);
服务器输出:
array(3) {
["valueTrue"]=>
string(4) "true"
["valueFalse"]=>
string(5) "false"
["valueNull"]=>
string(4) "null"
}
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
请注意,正确接收null、true和false值
还要注意,在第二种方法中,PHP代码中没有使用$\u POST数组。我认为这是问题的关键,但我找不到使用jQuery复制这种行为的方法
本节是在接受以下答案后添加的 这是原始代码的更正版本 Javascript代码:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data:
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
}
);
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data : JSON.stringify
(
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
)
}
);
服务器输出:
array(3) {
["valueTrue"]=>
string(4) "true"
["valueFalse"]=>
string(5) "false"
["valueNull"]=>
string(4) "null"
}
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
你会期待什么?您将此值作为POST参数发送,POST参数是简单的文本字符串。如果希望类型安全传输,请使用某种编码,例如JSON。(这不是
dataType
所做的-它指的是来自服务器的响应。)我希望它以valueNull=而不是valueNull=null的形式发送查询参数,这是我的经验
如果您使用JSON执行REST,您仍然需要发送GETS的查询参数,并且您不能将所有get转换为POST来回避此问题。对于遇到此问题的任何人,此错误在jQuery 1.8中已修复
您可以使用未定义的而不是空的
data: {
valueTrue : true,
valueFalse: false,
valueNull : undefined
}
我可能错了,但您的数据有效吗?不是所有的键/值都应该包含在“”中吗?这可能无法解决您的问题,但是如果您对数据进行字符串化,并只传递空字符串作为空值,那么我认为它可能会起作用?我有一种感觉,jquery将您的数据包装在“”中,因此您发送给服务器的值实际上是一个包含文本null的字符串,如:“null”。感谢Danny的回复,但我确信在JSON中可以使用true、false和null。请看www.json.org。你可能是对的,但我误解了你。在Javascript端字符串化数据解决了这个问题。谢谢。将数据编码为JSON解决了这个问题。我误解了“数据类型”选项的用途。