php - 我什么时候应该向 AJAX 返回 true/false 以及什么时候应该 echo "true"/"false"

标签 php javascript jquery ajax

不知怎的,我自己也很困惑。

不知何故,我在脑海中想到,当使用 AJAX(如 $.post)访问 PHP 时,您必须回显“true”或“false”,而不是返回 true/false。我现在发现情况并非如此,但是有人可以帮我解释一下吗?

测试 bool 值是否有问题?就像这里

... 
$.post('ajax/doThing',{data: data},
    function(response) {
        if(response) {
            doThis();
        }else{
            doThat();
        }

这就是问题所在,对吗?这里我不能返回 true/false,而是必须回显一个字符串并测试该字符串,是吗?

if(response === "true")

但是我看到 bool true/false 返回到 ajax 函数。如果您无法在 AJAX 端测试 bool 值,那么这有什么用呢?为什么 ajax 不能测试 bool 值?

还是我还是很困惑?

编辑

只是想感谢大家对此的良好回答。我现在+2 smrter。

最佳答案

当请求未真正成功时,您还可以考虑返回 HTTP 错误代码,而不是返回“成功”响应(HTTP 状态代码 200),然后使用 error 回调来处理请求失败。

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

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

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

  2. JSON(如果您想要一种轻量级、快速的方式将数据发送到客户端)

  3. XML(如果您想要一种更重量级、快速的方式将数据发送到客户端)

  4. 纯文本(无论你想要什么,真的)

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

我的猜测是,您正在使用多种内容类型中的任何一种,这些内容类型最终会将数据作为字符串传递给您的回调。字符串 "true" 为真,字符串 "false" 也为真(只有空白字符串为假)。

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

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

...并从中返回此文本:

{"success": true}

{"success": false}

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

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

或者,您可以返回 text/plainContent-Type 并使用

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

...但这是一种手动反序列化,您可以让基础设施为您完成此操作。

关于php - 我什么时候应该向 AJAX 返回 true/false 以及什么时候应该 echo "true"/"false",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14708269/

相关文章:

jquery - 事件页面上的 ListItem css 更改

jquery - 关于 jQuery 选择器的不同浏览器行为

javascript - 如何从另一个函数绑定(bind) Dom $(this)

PHP + JCrop - 裁剪错误区域

php - Laravel DB - 通过在另一列上添加日期来比较 2 个日期列

php - 将 MySQL SELECT 全部分为 7 个结果部分,并在每个部分上运行新查询

javascript - 同构 react ,意想不到的 token <

javascript - SquareUp SqPaymentForm() - 如何允许美国运通使用 4 位 cvv?

javascript - 在 javascript JSON 中添加字符串作为键

javascript - 如何在 React 路由器上使用 Laravel 路由