从AJAX的PHP脚本返回/过滤值的正确方法?

时间:2012-03-26 20:03:59

标签: php javascript jquery ajax types

请考虑以下事项:

<?php
//daytime_check.php
    $is_daytime = false;
    if ($is_daytime) {
        echo '1';
    } else {
        echo '0';
    }
?>

=============================================== ===================================

// javascript/jQuery
$.ajax({
    type: 'POST',
    url: 'daytime_check.php',
    success: function(response) {
        if(response == false) {
            alert('Goodnight, brother');
        } else {
            alert('Day\'s a wastin, brother');
        }            
    },
    error: function() {
        //handle error
    }
});

这就是我迄今为止处理我的AJAX的PHP脚本的响应。我希望有人可以给我一些更好的方法提示,因为这种方法感觉非常笨重。

特别笨重的是在JS端处理PHP脚本输出的“过滤”。例如:

在这种情况下,PHP的响应将是JS var response ='0'。现在,我们不能简单地使用JS中的if (!response)...来过滤,因为显然!response评估为false,而有趣的是,response == false评估为true。我想,与类型杂耍有关。

由于我可以从PHP返回内容的唯一方法是使用文本(echo语句),当我到达JS端时,我无法返回正确的true / false值来进行过滤。有没有更好的方法来解决这个问题?

我希望这至少有点意义。

3 个答案:

答案 0 :(得分:1)

您仍然可以返回任何您想要的类型。只需使用JSON响应。

// you can return what ever you want via JSON
die(json_encode(array(
    'isDateTime' => $is_datetime,
    'message'    => 'Some optional message to display',
    'timestamp'  => time()
)));

这将输出此字符串:

{"isDateTime":false,"message":"Some optional message to display","timestamp":1332792739}

在客户端,jQuery将解析此响应:

$.ajax({
    type: 'POST',
    url: 'daytime_check.php',
    dataType: 'json',
    success: function(response) {
        if (response.isDateTime) { ... }
        // typeof response.isDateTime == 'boolean'
        // alert(response.message)         
    },
    error: function() {
        //handle error
    }
});

答案 1 :(得分:0)

如果您只需要在成功处理程序中显示消息,那么为什么不自己返回消息呢?

<?php
//daytime_check.php
    $is_daytime = false;
    if ($is_daytime) {
        echo "Day's a wastin', brother";
    } else {
        echo "Goodnight, brother";
    }
?>

$.ajax({
    type: 'POST',
    url: 'daytime_check.php',
    success: function(response) {
        alert(response);         
    },
    error: function() {
        //handle error
    }
});

答案 2 :(得分:0)

这是一个聪明的前同事提供的一个简洁的解决方案。

以下列方式从PHP脚本返回值:

<?php
    // To return an error
    echo json_encode(
        array(
            'success' => false,
            'message' => '[error message here]',
        )
    );
    // To return a successful response
    echo json_encode(
        array(
            'success' => true,
            'response' => [return value here],
        )
    );

这样,我们可以轻松地在JS方面做逻辑:

$.ajax({
    type: 'POST',
    url: 'ajax_example.php',
    success: function(response) {
                 response = JSON.parse(response);
                 if (!response.success) {
                     alert(response.message);
                 } else {
                     console.log(response.response);    
                 }
    },
    error: function() {
               //handle error
               alert('error doing ajax, mate');
           }
    });