JSON数组回显到AJAX脚本时出错

时间:2016-02-23 13:05:54

标签: php jquery ajax

我有一个文本框,我在其中搜索数据库以获取特定信息。

我输入并点击搜索时的PHP代码如下:

try
{
    $date_emp = $_POST['date_emp'];
    $val = $_POST['data1'];
    $gender = $_POST['gen'];


    if($date_emp == "choose" && $gender == "specify")
    {
        $search = "SELECT * FROM employee 
                    WHERE emp_name = :val OR position = :val 
                    OR salary = :val OR date_employed = :val 
                    OR gender = :val";
        $searchStmt = $conn->prepare($search);
        $searchStmt->bindValue(":val", $val);

        $searchStmt->execute();

        $res = $searchStmt->fetchAll();
        echo json_encode($res);
    }
catch(PDOException $ex)
{
    echo $ex->getMessage();
}

这里有AJAX脚本:

$("#search").click(function()
        {
            var txt = $("#txtSearch").val();
            var drop = $("#date_employed").val();
            var gender = $("#sex").val();
            //console.log(txt);
            if(txt == '' && drop == "choose" && gender == "specify")
            {
                $("#txtSearch").css('border-color', 'red');
            }
            else
            {
                if(drop == "choose" && gender == "specify")
                {
                    $.ajax
                    ({
                        url: 'search.php',
                        type: 'POST',
                        data: {data1: txt, date_emp: drop, gen: gender},
                        dataType: 'JSON',

                        success:function(res)
                        {
                            $("#myTable tr").remove();
                            $("#myTable").append("<tr><th>Name</th><th>Position</th><th>Salary</th><th>Date</th><th>Gender</th></tr>");
                            $.each( res, function(key, row){
                                $("#myTable").append("<tr><td>"+row['emp_name']+"</td><td>"+row['position']+"</td><td>"+row['salary']+"</td><td>"+row['date_employed']+"</td><td>"+row['gender']+"</td></tr>");
                            });
                        },
                        error:function(res)
                        {
                            alert("Something Wrong");
                        }
                    });
                }

                $("#date_employed, #sex").change(function()
                {
                    var txt = $("#txtSearch").val();
                    var drop = $("#date_employed").val();
                    var gender = $("#sex").val();

                    $.ajax({
                        url: 'search.php',
                        type: 'post',
                        data: {data1: txt, date_emp: drop, gen: gender},
                        datatype: 'json',

                        success:function(res)
                        {
                            $("#myTable tr").remove();
                            $("#myTable").append("<tr><th>Name</th><th>Position</th><th>Salary</th><th>Date</th><th>Gender</th></tr>");
                            $.each( res, function(key, row){
                                $("#myTable").append("<tr><td>"+row['emp_name']+"</td><td>"+row['position']+"</td><td>"+row['salary']+"</td><td>"+row['date_employed']+"</td><td>"+row['gender']+"</td></tr>");
                            });
                        },
                        error:function(res)
                        {
                            alert("Couldn't find any data!");
                        }
                    });
                });
            }
        });

性别和展示位置是形成搜索过滤器的2个下拉列表

当我更改其中一个下拉列表时,每个示例,当我选择等于:this week的日期时,我应该在表2中看到。 但我只能在网络中看到它们(在devTool中),在控制台选项卡上我看到以下错误:

  

未捕获的TypeError:无法在&#39;中使用&#39;运营商搜索&#39;长度&#39;在   [{&#34; ID&#34;:&#34; 48&#34;&#34; 0&#34;:&#34; 48&#34;&#34; EMP_NAME&#34;:&#34 ; Alexa的&#34;&#34; 1&#34;:&#34; Alexa的&#34;&#34;位置&#34;:&#34;司&#34;&#34; 2&#34; :&#34;司&#34;&#34;工资&#34;:&#34; 8000&#34;&#34; 3&#34;:&#34; 8000&#34;&#34; date_employed&#34;:&#34; 2016年2月23日&#34;&#34; 4&#34;:&#34; 2016年2月23日&#34;&#34;两性&#34;:& #34;女性&#34;&#34; 5&#34;:&#34;女性&#34;}]

更改下拉列表时的PHP代码是:

if($date_emp == "week" && $gender == "specify")
    {
        $search = "SELECT * FROM employee WHERE (emp_name = :val OR position = :val 
                    OR salary = :val OR date_employed = :val 
                    OR gender = :val) AND date_employed > DATE_SUB(NOW(), INTERVAL 1 WEEK)";
        $searchStmt = $conn->prepare($search);
        $searchStmt->bindValue(":val", $val);

        $searchStmt->execute();

        $res = $searchStmt->fetchAll();
        echo json_encode($res);
    }

1 个答案:

答案 0 :(得分:2)

当你进行ajax调用并期望响应是json时,你需要从PHP发送一个json头

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

从PHP发送json标头将转换&#34; res&#34;你的ajax中的param到json对象而不是json字符串。 如果您没有发送标头,则需要将json字符串解析为json对象

var json = JSON.parse(res);