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

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调用中.


Ari*_*iel 5

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

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