来自 jQuery Ajax 的 Bool 参数作为文字字符串“fal

Bool parameter from jQuery Ajax received as literal string quot;falsequot;/quot;truequot; in PHP(来自 jQuery Ajax 的 Bool 参数作为文字字符串“false/“true接收在 PHP 中)
本文介绍了来自 jQuery Ajax 的 Bool 参数作为文字字符串“false"/“true"接收在 PHP 中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题与:

无法使用 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 中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Convert JSON integers and floats to strings(将JSON整数和浮点数转换为字符串)
in php how do I use preg replace to turn a url into a tinyurl(在php中,如何使用preg替换将URL转换为TinyURL)
all day appointment for ics calendar file wont work(ICS日历文件的全天约会不起作用)
trim function is giving unexpected values php(Trim函数提供了意外的值php)
Basic PDO connection to MySQL(到MySQL的基本PDO连接)
PHP number_format returns 1.00(Php number_Format返回1.00)