Enr*_*que 39 php ajax jquery post type-conversion
这个问题与以下内容有关:
无法使用jQuery AJAX将null传递给服务器.在服务器上收到的值是字符串"null"
但是我再次问它,因为那个问题的解决方案非常难看,而且我认为必须是更好的解决方案.
问题
当您使用POST将带有jQuery Ajax的数据发送到PHP时,您将获得字符串"false"(字符串)而不是false(bool),"true"而不是true(bool)和"null"而不是NULL:
解决方案
(在上面的问题中提出):在使用jQuery发送之前将数据转换为JSON,然后在PHP中解码该数据.使用代码:
Javascript代码:
$.ajax
(
{
url : <server_url>,
dataType: 'json',
type : 'POST',
success : receiveAjaxMessage,
data : JSON.stringify
(
{
valueTrue : true,
valueFalse: false,
valueNull : null
}
)
}
);
Run Code Online (Sandbox Code Playgroud)
PHP代码:
var_dump(json_decode(file_get_contents('php://input'), true));
Run Code Online (Sandbox Code Playgroud)
对我来说,这不是一个解决方案,只是一个丑陋的黑客.
在我的情况下的问题是我不能使用file_get_contents('php:// input')来访问$ _POST,甚至更多,我不能使用$ _POST因为我正在使用HMVC.
而且我知道我可以修复它在PHP中检查那些"false","true"和"null",或者在jQuery中发送1和0 instear true和false.
但我认为这一定是一个非常常见的问题,jQuery是一个非常常见的框架,因此我非常确定在jQuery中使用正确的类型发送数据是一种更好,更优雅的方法.
ski*_*joe 44
根据我的经验,如果你有
dataType: 'json'
Run Code Online (Sandbox Code Playgroud)
和
contentType: 'application/json'
Run Code Online (Sandbox Code Playgroud)
在你的jQuery ajax调用中,在发送之前JSON.stringify你的数据将作为一个可解析的javascript对象到达服务器.或者在我的情况下,我正在使用NodeJS服务器端,它作为Javascript对象到达,具有正确的布尔值,而不是字符串bool.但是如果我省略了内容类型属性,那么所有事情都会变得很糟糕,包括bools.
cod*_*ove 17
因为HTTP是一个没有布尔或整数概念的文本协议,所以必须对所有内容进行字符串化.比较服务器端的字符串是处理布尔值的常用方法.
如果你真的希望PHP看到0或1你可以使用
valueTrue : true ? 1 : 0
Run Code Online (Sandbox Code Playgroud)
在你的AJAX调用中.