Jquery / Ajax返回数据但不警告

时间:2015-11-05 11:13:06

标签: php jquery ajax

我有这些代码:

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中没有​​显示。它甚至没有提醒成功区域的任何事情。

  1. 如果我取消注释echo json_encode($ records,JSON_UNESCAPED_UNICODE);,是否正确检索json数据?
  2. 就像我想使用我的数据库中的数据一样。我该怎么办?我得到这样的json:

    [{"cinfo_id":"1","fullName":"علی علوی","phone":"09151234576","mail":"ali.Alavi@gmail.com","description":"در نمایشگاه آشنا شدیم","jinfo_id":"1","jobTitle":"شرکت","jobName":"بازرگانی","city":"مشهد"}] 
    

    并回应,但当我说

    $('#show').html(msg.fullName); 
    

    例如,什么都不会显示。

    提前致谢。

1 个答案:

答案 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