我应该什么时候将true / false返回给AJAX?何时应该回显“true”/“false”

时间:2013-02-05 13:06:39

标签: php javascript jquery 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")

但是我看到boolean true / falses返回到ajax函数。如果你不能在AJAX端测试一个布尔值,有什么用呢?为什么ajax不能测试布尔值?

还是我还困惑?

修改

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

4 个答案:

答案 0 :(得分:6)

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

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

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

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

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

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

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

  5. 客户端所做的将取决于您在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 text/plain并使用

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

    ...但是那种手动反序列化可以让你的基础设施为你完成。

答案 1 :(得分:4)

您的脚本应该返回一个响应,该响应转换为与PHP变量等效的JavaScript,以便进行此类比较使用HTTP状态代码来传达错误情况。

响应处理

jQuery.ajax()和朋友根据您发送的响应标头解释响应(默认情况下自动),无论是XML,JSON等。

以下代码输出JSON格式的响应:

header('Content-Type: application/json');
echo json_encode(array(
    'success' => true,
));

发送到浏览器的输出如下所示:

{"success": true}

在成功处理程序中,您现在可以使用以下代码:

if (response.success) { ... }

错误处理

jQuery.ajax()还可以处理除常规200 OK之外的HTTP状态代码响应,例如:

header('404 Not found');
exit;

这将调用您的错误处理程序:

$.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');
    }
});

答案 2 :(得分:3)

全部取决于您的服务器响应。如果您使用appropriate MIME typesjQuery可能会自动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") {…}
} …

答案 3 :(得分:2)

Ajax调用期望脚本返回一个文本,当你返回一个php bool时,它不会被输出,所以你需要回显“某事”,它不必是“true”或“false”< / p>