我有一个文本框,我在其中搜索数据库以获取特定信息。
我输入并点击搜索时的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);
}
答案 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);