来自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”。