为什么这个php json无法正常工作

时间:2014-09-01 13:00:46

标签: php jquery json

我创建了一个简单的PHP脚本。如果输入"hello"作为POST参数name,则应返回错误。否则,它应该返回成功。返回值应出现在DIV中。

但它不起作用?为什么不呢?

if(isset($_POST)){
    $name = $_POST['name'];

    if($name == 'hello'){
        echo json_encode(array('comment_error' => 'You cant say hello'));
    } else {

    }
    echo json_encode(array('comment_success' => 'awesome! It worked'));

}

以下是解析响应的javascript:

$.ajax({
     type: 'POST',
     url: 'comment/post.php',
     data: {name:name},
     dataType: 'json',
     success:function(data){
            if(data.comment_error){
                 alert(data.comment_error);
            } else {
                 $('div').append(data.comment_success);
            }
     }
});

4 个答案:

答案 0 :(得分:2)

将最后一行php代码移入else条件并更改js代码

data = JSON.parse(data); // add this in your call back
if(data.comment_error){
    alert(data.comment_error);
} else {
    $('div').append(data.comment_success);
}

答案 1 :(得分:2)

你必须发送Json标题头('Content-Type:application / json');

header('Content-Type: application/json');   
if(isset($_POST)){

    $name = $_POST['name'];

    if($name == 'hello'){
        echo json_encode(array('comment_error' => 'You cant say hello'));
    } else {

    }
    echo json_encode(array('comment_success' => 'awesome! It worked'));

}

答案 2 :(得分:0)

检查您的if else loop

代码应该是这样的

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

if(isset($_POST)){
        $name = $_POST['name'];

        if($name == 'hello'){
            echo json_encode(array('comment_error' => 'You cant say hello'));
        } else {
            echo json_encode(array('comment_success' => 'awesome! It worked'));
        }


    }

答案 3 :(得分:0)

放这个 echo json_encode(array('comment_success'=>'awesome!it working')); 在其他地方这样:

header('Content-Type: application/json');   
if(isset($_POST)){

    $name = $_POST['name'];

    if($name == 'hello'){
        echo json_encode(array('comment_error' => 'You cant say hello'));
    } else {
       echo json_encode(array('comment_success' => 'awesome! It worked'));
    }

}

顺便说一下。如果您使用免费主机测试您的脚本,如000webhost,您应该知道他们在html中添加了额外的代码行。如果是这样,Ajax无法解析json对象。

无法解析:

<!-- Blabla 000webhost free hosting blabla -->
{"comment_success" : "awesome! It worked"} 
<!-- Blabla 000webhost free hosting blabla -->

P.S你不需要var json = $.parseJSON(data);,因为dataType = 'json'为你做了。我的意思是成功“数据”已经是一个JSON对象。