来自jQuery Ajax的Bool参数在PHP中作为文字字符串“false”/“true”接收

这个问题与以下内容有关:

无法使用jQuery AJAX将null传递给服务器。 在服务器上收到的值是字符串“null”

但是我再次问它,因为那个问题的解决方案非常难看,而且我认为必须是更好的解决方案。

问题
当您使用POST将带有jQuery Ajax的数据发送到PHP时,您将获得字符串“false”(字符串)而不是false(bool),“true”而不是true(bool)和“null”而不是NULL:


(在上面的问题中提出):在用jQuery发送之前将数据转换为JSON,然后在PHP中解码该数据。 使用代码:

Javascript代码:

$.ajax ( { 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)); 

对我来说,这不是一个解决方案,只是一个丑陋的黑客。

在我的情况下的问题是我不能使用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。 但是如果我省略了内容类型属性,那么事情就会变得很糟糕,包括bools。

因为HTTP是一个没有布尔或整数概念的文本协议,所以必须对所有内容进行字符串化。 比较服务器端的字符串是处理布尔值的常用方法。

如果你真的希望PHP看到0或1你可以使用

  valueTrue : true ? 1 : 0 

在你的AJAX调用中。

我遇到了同样的问题。 我通过发送一个1或0的布尔值来解决它。

$.ajax我做了data : {field_name: field ? 1 : 0} data : {field_name: field ? 1 : 0}

如果您不在服务器上处理类型转换,那么您必须发送您期望的内容。

代替:

  { valueTrue : true, valueFalse: false, valueNull : null } 

使用:

  { valueTrue : 'TRUE', valueFalse: 'FALSE', valueNull : 'NULL' } 

三元运算符很清楚……

  valueTrue : myvar ? : 'TRUE' : 'FALSE'; 

但可能更清楚的是将“.toString()。toUpperCase()”附加到变量:

  valueTrue : myvar.toString().toUpperCase(); 

但是,如果myvar为null,那将无效…

此示例显示了在发送数据之前可以使用的转换器function。

        

我尝试在控制器的模型中使用布尔对象而不是原始布尔类型,并且它起作用。

我有contentType:’application / json; charset = utf-8’,数据类型为“POST”。