echo json_encode()无法通过ajax调用工作

时间:2013-12-12 00:57:31

标签: php jquery ajax

我真的不知道我在这里缺少什么。我有这个脚本:

        <script type="text/javascript">
            function ServiceOffer(){
                var service_name  = $('#service_name').val(),
                    dataString = "service="  + service_name;
                    $.ajax({
                        type: "POST",
                        url:  "posted.php",
                        data:dataString,
                        success:function(data){
                            console.log(data);
                        }
                    });
            }

            $(document).ready(function(){   
                ServiceOffer();

                $(document).on('change','#service_name',function(){
                    ServiceOffer();                 
                });     
            });
        </script>

这是posted.php

的代码
    <?php

        $connect = mysql_connect('localhost','root','') or die('Unable to connect'.mysql_error());
        $select = mysql_select_db('hcs',$connect) or die('Unable to select database'.mysql_error());
        $service = $_POST['service'];

        $query = mysql_query("SELECT * FROM serviceoffer WHERE servicename = '$service'");
        $num = mysql_num_rows($query);  

        while($rows = mysql_fetch_array($query)){
            $data[] = $rows;
        }
        echo json_encode($data);

那么我错过了什么?我不认为我的代码中附加了一个字符串,它在我的控制台中提供了字符串而不是json编码数据。请帮忙!谢谢!

编辑:这是我的控制台中返回的数据。

enter image description here

2 个答案:

答案 0 :(得分:3)

您有三种选择:

  1. dataType: 'json'添加到$.ajax
  2. 中的选项
  3. header("Content-type: application/json");添加到PHP代码中。
  4. 在成功功能中使用console.log($.parseJSON(data))
  5. 请注意,如果您还使用了选项1或2,则不应使用选项3.jQuery会在前两种情况下自动解析JSON,并且您将尝试解析结果,而不是工作

答案 1 :(得分:2)

至少应该在PHP中发送适当的标头,例如

header('Content-type: application/json');
echo json_encode($data);
exit;

您还可以在jQuery的dataType方法中设置$.ajax以指定预期的响应类型。我还发现将请求参数作为对象文字发送更容易(节省了必须构建URL编码的字符串),例如

$.ajax({
    type: 'POST',
    dataType: 'json',
    data: { service: service_name },
    //etc

更新

提到shirejedi时,您应该将$data初始化为数组

$data = array();
while($rows = mysql_fetch_array($query)){
    $data[] = $rows;
}