无法使用 jQuery AJAX 将 null 传递到服务器。服务器接收到的值是字符串“null”。
我正在将 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
}
I am converting a javascript/php/ajax application to use jQuery to ensure compatibility with browsers other than Firefox.
I am having trouble passing true, false, and null values using jQuery's ajax function.
Javascript code:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data:
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
}
);
PHP code:
var_dump($_POST);
Server output:
array(3) {
["valueTrue"]=>
string(4) "true"
["valueFalse"]=>
string(5) "false"
["valueNull"]=>
string(4) "null"
}
The problem is that the null, true, and false values are being converted to strings.
The Javascript AJAX code currently in use passes null, true, and false correctly but only works in Firefox.
Does anyone know how to solve this problem using jQuery?
Here is some working code (not using jQuery) to compare with the not-working code given above.
Javascript Code:
ajaxPort.send
(
<server_url>,
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
);
PHP code:
var_dump(json_decode(file_get_contents('php://input'), true));
Server output:
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
Note that the null, true, and false values are correctly received.
Note also that in the second method the $_POST array is not used in the PHP code. I think this is the key to the problem, but I cannot find a way to replicate this behavior using jQuery.
This section was added after the answer below was accepted.
Here is a corrected version of the original code.
Javascript code:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data : JSON.stringify
(
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
)
}
);
PHP code:
var_dump(json_decode(file_get_contents('php://input'), true));
Server output:
array(3) {
["valueTrue"]=>
bool(true)
["valueFalse"]=>
bool(false)
["valueNull"]=>
NULL
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你会期待什么?您将此值作为 POST 参数发送,这些参数是简单的文本字符串。如果您想要类型安全的传输,请使用某种编码,例如 JSON。 (这不是
dataType
所做的 - 它指的是来自服务器的响应。)What would you expect? You are sending this values as POST parameters, which are simple text strings. If you want type-safe transfer, use some sort of encoding, such as JSON. (Which is not what
dataType
does - that refers to the response from the server.)您可以使用未定义而不是null。
You can use undefined instead of null.
对于遇到此问题的任何人,该错误已在 jQuery 1.8
https://github.com/jquery 中修复/jquery/pull/714
For anyone that comes across this, the bug is fixed in jQuery 1.8
https://github.com/jquery/jquery/pull/714
我希望它将查询参数发送为 valueNull= 而不是 valueNull=null 这是我的经验。
如果您使用 JSON 进行 REST,您仍然需要发送 GETS 的查询参数,并且您不得将所有 GETS 转换为 POSTS 来解决此问题。
I would expect it to send query params as valueNull= rather than valueNull=null which is my experience.
If you are doing REST with JSON you still need to send query params for GETS and you must not convert all your GETS to POSTS to get round this issue.