不知怎的,我自己也很困惑。
不知何故,我在脑海中想到,当使用 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(很多人都这样做):
客户端和服务器之间传输的数据始终文本。诀窍是确保客户端和服务器就客户端应如何反序列化文本(收到后对其进行转换)达成一致。通常,您可能会返回以下四种内容之一:
HTML(如果要填充页面元素)
JSON(如果您想要一种轻量级、快速的方式将数据发送到客户端)
XML(如果您想要一种更重量级、快速的方式将数据发送到客户端)
纯文本(无论你想要什么,真的)
客户端的操作取决于您在 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/plain
的 Content-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/