我莫名其妙地迷糊了自己。
不知何故,我想到用AJAX(如$ .post)打PHP时,您必须回显“ true”或“ false”,而不是返回true / false。我现在知道不是这种情况,但是有人可以为我分解吗?
测试布尔值是否存在问题?像这儿
... $.post('ajax/doThing',{data: data}, function(response) { if(response) { doThis(); }else{ doThat(); }
那是有问题的情况,对吗?在这里,我不能返回true / false,而是必须回显一个字符串并测试该字符串,是吗?
if(response === "true")
但是我看到布尔true / false返回到ajax函数。如果您无法在AJAX端测试布尔值,则此方法有什么用?为什么Ajax无法测试布尔值?
还是我仍然感到困惑?
编辑
只是想感谢大家在此方面的良好回答。我现在是+2人。
您可能还会查看返回HTTP错误代码,而不是在请求未真正成功时返回“成功”响应(HTTP状态代码200),然后使用error回调来处理不成功的请求。
error
但是,如果您想继续使用状态码200(很多人这样做):
客户端和服务器之间传输的数据 始终 是文本。诀窍是要确保客户端和服务器就客户端应如何反序列化文本(在收到后进行转换)达成一致。通常,您可能会返回以下四种情况之一:
HTML(如果要填充页面元素)
JSON(如果您想要一种轻巧,快速的方法来将数据发送到客户端)
XML(如果您希望使用更重的快速方法将数据发送到客户端)
纯文本(实际上是您想要的任何内容)
客户端的操作将取决于Content-Type您在PHP页面中使用的标头。
Content-Type
我的猜测是,您使用的是几种内容类型中的任何一种,最终都会将数据作为字符串传递给回调。该字符串"true"是truthy,但这样是 字符串 "false"(仅空字符串falsey)。
"true"
"false"
长话短说:我可能会在我的PHP中使用它:
header('Content-Type', 'application/json');
…并从中返回此文本:
{"success": true}
要么
{"success": false}
…然后在您的成功处理程序中:
if (response.success) { // It was true } else { // It was false }
或者,您可以返回Content-Typeof text/plain并使用
text/plain
if (response === "true") { // It was true } else { // It was false }
…但是这是一种手动反序列化,您可以在其中获得基础架构为您完成的工作。