问题描述
这个问题与:
无法使用 jQuery AJAX 将 null 传递给服务器.服务器收到的值为字符串null"
但我又问了一遍,因为那个问题的解决方案非常难看,而且我认为必须是更好的解决方案.
问题
当您使用 POST 使用 jQuery Ajax 将数据发送到 PHP 时,您会得到字符串false"(string) 而不是 false(bool)、true"而不是 true(bool) 和null"而不是 NULL:
解决方案
(在上述问题中提出):在使用 jQuery 发送之前将数据转换为 JSON,然后在 PHP 中解码该数据.附代码:
Javascript 代码:
$.ajax({url : <server_url>,数据类型:'json',类型:'POST',成功:接收AjaxMessage,数据:JSON.stringify({值真:真,值假:假,valueNull : 空})});
PHP 代码:
var_dump(json_decode(file_get_contents('php://input'), true));
对我来说,这不是一个解决方案,只是一个丑陋的黑客.
我的情况的问题是我无法使用 file_get_contents('php://input') 来访问 $_POST,更何况我无法使用 $_POST,因为我使用的是 HMVC.>
而且我知道我可以通过检查 PHP 中的false"、true"和null"来修复它,或者在 jQuery 中发送 1 和 0 instear true 和 false.
但我认为这一定是一个非常普遍的问题,而且 jQuery 是一个非常普遍的框架,所以我很确定有一种更好、更优雅的方式来在 jQuery 中以正确的类型发送数据.
根据我的经验
dataType: 'json'
和
contentType: 'application/json'
在您的 jQuery ajax 调用中,并在您发送之前对您的数据进行 JSON.stringify,它将作为可解析的 javascript 对象到达服务器.或者在我的情况下,我使用 NodeJS 服务器端,它作为一个 Javascript 对象到达,具有正确的布尔值,而不是字符串布尔值.但是,如果我省略了内容类型属性,那么包括 bool 在内的一切都会变得混乱.
This question is related with:
Cannot pass null to server using jQuery AJAX. Value received at the server is the string "null"
But I'm asking it again because the solution in that question is very ugly, and I think must be a better one.
PROBLEM
When you send data with jQuery Ajax to PHP using POST you get strings "false"(string) instead of false(bool), "true" instead of true(bool) and "null" instead of NULL:
SOLUTION
(proposed in the above question):
convert the data to JSON before send it with jQuery, and then decode that data in PHP.
With 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));
To me that's not a solution, only an ugly hack.
The problem in my situation is that I can't use file_get_contents('php://input') to access the $_POST, even more, I can't use $_POST because I'm using HMVC.
And I know I can fix it checking those "false", "true" and "null" in PHP, or sending 1 and 0 instear true and false in jQuery.
But I think this must be a really common problem, and jQuery is a really common framework, so I'm pretty sure there's a better and elegant way to send the data with the right type in jQuery.
In my experience if you have
dataType: 'json'
and
contentType: 'application/json'
in your jQuery ajax call, and JSON.stringify your data before you send it will arrive at the server as a parse-able javascript object. Or in my case I'm using NodeJS serverside and it arrives as a Javascript object, with correct booleans, not string bools. But if I leave out the content type attribute then things get all goofed up including the bools.
这篇关于来自 jQuery Ajax 的 Bool 参数作为文字字符串“false"/“true"接收在 PHP 中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!