什么时候应该将true / false返回给AJAX?何时应该回显“true”/“false”
不知怎的,我把自己搞糊涂了。
不知怎的,我在脑子里得知,当用AJAX(比如$ .post)点击PHP时,你必须回显一个“true”或“false”而不是返回true / false。 我现在看到的情况并非如此,但有人可以为我分解吗?
是否存在测试布尔值的问题? 像这儿
... $.post('ajax/doThing',{data: data}, function(response) { if(response) { doThis(); }else{ doThat(); }
那是问题的情况,对吗? 在这里我不能返回true / false,而是我必须回显一个字符串并测试字符串,是吗?
if(response === "true")
但我看到boolean true / falses返回到ajax函数。 如果你不能在AJAX端测试一个布尔值,有什么用呢? 为什么ajax不能测试布尔值?
还是我还困惑?
编辑
只是想感谢大家对此的好答案。 我现在+2 smrter。
您还可以查看返回HTTP错误代码,而不是在请求不是真正成功时返回“成功”响应(HTTP状态代码200),然后使用error
回调来处理不成功的请求。
但是如果你想继续使用状态代码200(很多人这样做):
客户端和服务器之间传输的数据始终是文本。 诀窍是确保客户端和服务器就客户端如何反序列化文本达成一致(在收到后对其进行转换)。 通常,您可能会返回以下四种情况之一:
-
HTML(如果它将填充页面元素)
-
JSON(如果您想要一种轻量级,快速的方式将数据发送到客户端)
-
XML(如果你想要一个更重,更快的方式将数据发送到客户端)
-
纯文本(无论你想要什么,真的)
客户端所做的将取决于您在PHP页面中使用的Content-Type
标头。
我的猜测是你正在使用几种内容类型中的任何一种,最终将数据作为字符串传递给你的回调。 字符串"true"
是真实的,但字符串 "false"
(只有空字符串是假的)。
长话短说:我可能在我的PHP中使用它:
header('Content-Type', 'application/json');
……并从中返回此文本:
{"success": true}
要么
{"success": false}
…然后在你的成功处理程序中:
if (response.success) { // It was true } else { // It was false }
或者,您可以返回Content-Type
of text/plain
并使用
if (response === "true") { // It was true } else { // It was false }
…但是那种手动反序列化可以让您获得基础设施来为您完成。
您的脚本应该返回一个响应,该响应转换为PHP等效的PHP变量以进行此类比较, 或者使用HTTP状态代码来传达错误条件。
响应处理
jQuery.ajax()
和朋友根据您发送的响应头解释响应(默认情况下自动),无论是XML,JSON等。
以下代码输出JSON格式的响应:
header('Content-Type: application/json'); echo json_encode(array( 'success' => true, ));
发送到浏览器的输出如下所示:
{"success": true}
在您的成功处理程序中,您现在可以使用以下代码:
if (response.success) { ... }
error handling
jQuery.ajax()
还可以处理除常规200 OK
之外的HTTP状态代码响应,例如:
header('404 Not found'); exit;
这将调用您的error handling程序:
$.ajax({ url: ..., error: function(xhr, status, msg) { // xhr - see http://api.jquery.com/jQuery.ajax/#jqXHR // status - "error" // msg - "Not found" alert('Error code ' + xhr.code + ' encountered'); } });
一切都取决于您的服务器响应。 如果您使用适当的MIME类型 , jQuery可能会自动为您响应JSON.parse()
,将布尔值true
传递给您的回调。 如果它无法识别JSON,它将传递您需要比较的文本结果"true"
:
// PHP: header('Content-Type', 'application/json'); echo true; // or "true" or json_encode(true) // JavaScript (with jQuery.ajax): … function callback(response) { typeof response; // "boolean" if (response) {…} } …
// PHP: header('Content-Type', 'text/plain'); // or similar, also implicit echo "true"; // JavaScript (with jQuery.ajax): … function callback(response) { typeof response; // "string" if (response == "true") {…} } …
Ajax调用期望脚本返回一个文本,当你返回一个php bool时,它不会被输出,所以你需要回显“某事”,它不必是“true”或“false”