小编典典

什么时候应该向AJAX返回true / false,什么时候应该回显“ true” /“ false”

ajax

我莫名其妙地迷糊了自己。

不知何故,我想到用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人。


阅读 359

收藏
2020-07-26

共1个答案

小编典典

您可能还会查看返回HTTP错误代码,而不是在请求未真正成功时返回“成功”响应(HTTP状态代码200),然后使用error回调来处理不成功的请求。

但是,如果您想继续使用状态码200(很多人这样做):

客户端和服务器之间传输的数据 始终
是文本。诀窍是要确保客户端和服务器就客户端应如何反序列化文本(在收到后进行转换)达成一致。通常,您可能会返回以下四种情况之一:

  1. HTML(如果要填充页面元素)

  2. JSON(如果您想要一种轻巧,快速的方法来将数据发送到客户端)

  3. XML(如果您希望使用更重的快速方法将数据发送到客户端)

  4. 纯文本(实际上是您想要的任何内容)

客户端的操作将取决于Content-Type您在PHP页面中使用的标头。

我的猜测是,您使用的是几种内容类型中的任何一种,最终都会将数据作为字符串传递给回调。该字符串"true"是truthy,但这样是 字符串
"false"(仅空字符串falsey)。

长话短说:我可能会在我的PHP中使用它:

header('Content-Type', 'application/json');

…并从中返回此文本:

{"success": true}

要么

{"success": false}

…然后在您的成功处理程序中:

if (response.success) {
    // It was true
}
else {
    // It was false
}

或者,您可以返回Content-Typeof text/plain并使用

if (response === "true") {
    // It was true
}
else {
    // It was false
}

…但是这是一种手动反序列化,您可以在其中获得基础架构为您完成的工作。

2020-07-26