我有这些代码:
show.php:
<div id="show" style="background-color: white; color: #2b2b2b "></div>
<script>
$(document).ready(function(){
$('#btnsearch').click(function(){
var key = {
'command': 'search',
'data': $("#inputsearch").val()
};
$.ajax({
type: 'POST',
url: 'query.php',
data: key,
dataType: 'json',
success: function(msg){
$('#show').html(msg);
}
})
});
});
</script>
和query.php:
$command = $_SESSION['command'];
if($command == 'search'){
$db = Db::getInstance();
$str = $_POST['data'];
$records = $db->query("SELECT * FROM m_cinfo LEFT OUTER JOIN m_jinfo ON m_cinfo.cinfo_id=m_jinfo.cinfo_id where fullName LIKE '%$str%'");
//echo json_encode($records, JSON_UNESCAPED_UNICODE);
echo 'تست';
}
Parrams和Responce是正确的,输入文本+搜索发送到query.php和تست返回,但我的div中没有显示。它甚至没有提醒成功区域的任何事情。
就像我想使用我的数据库中的数据一样。我该怎么办?我得到这样的json:
[{"cinfo_id":"1","fullName":"علی علوی","phone":"09151234576","mail":"ali.Alavi@gmail.com","description":"در نمایشگاه آشنا شدیم","jinfo_id":"1","jobTitle":"شرکت","jobName":"بازرگانی","city":"مشهد"}]
并回应,但当我说
$('#show').html(msg.fullName);
例如,什么都不会显示。
提前致谢。
答案 0 :(得分:2)
这是因为ajax期望json响应并且query.php脚本不返回json。 如果你向你的ajax添加错误回调,你会看到它被触发了。
$.ajax({
type: 'POST',
url: 'query.php',
data: key,
dataType: 'json',
success: function(msg){
$('#show').html(msg);
},
error: function (err) {
console.log(err);
}
要在query.php中修复此问题,您应该像这样回复json_encoded字符串
echo json_encode(array('message' => 'تست'));
然后在您的成功回调中,您可以访问此消息
success: function(response){
$('#show').html(response.message);
}
更新:好的,如果您的$ db-&gt;查询方法将json作为字符串返回,那么您可以执行以下操作
$records = $db->query("SELECT * FROM m_cinfo LEFT OUTER JOIN m_jinfo ON m_cinfo.cinfo_id=m_jinfo.cinfo_id where fullName LIKE '%$str%'");
$decoded = json_decode($records, true);
echo json_encode($decoded);
请注意,您的查询容易受到SQL injection的攻击。您应该转义$ str变量或使用预准备语句。例如,如果有人在搜索字段中输入此字符串,则可能会删除“m_cinfo”表
somestring'; DROP TABLE m_cinfo; #
^ this will comment the rest of your query