【问题标题】:PHP JSON Response Includes HTML LayoutPHP JSON 响应包括 HTML 布局
【发布时间】:2014-08-16 04:15:00
【问题描述】:

我在这里遇到了一个问题:我正在尝试创建一个 jQuery/AJAX/PHP 实时搜索栏。我调用search.php 很好,但是每当我在控制台中输出响应时,我都会得到我的master.php 文件的内容(这只是站点范围的布局)以及JSON 编码的结果。我无法弄清楚是什么导致了这种情况发生。

这是我的 jQuery:

$(function() {
$("#search-text").keyup(function() {
    var $res = $(".search-results");

    $.ajax({
        type: "POST",
        url: "search.php",
        data: { query: $(this).val() },
        cache: false,
        success: function(html) {
            $res.show();
            $res.append(html);
            console.log(html);
        },
        error: function(xhr, status, error) {
            console.log("XHR: " + xhr);
            console.log("Status: " + status);
            console.log("Error: " + error);
        }
    });

    return false;

});
});

还有search.php:

$key = $_POST["query"];
$db = new Database();
$db->query("SELECT * FROM users WHERE firstname LIKE :key OR lastname LIKE :key OR firstname AND lastname LIKE :key");
$db->bind(":key", '%' . $key . '%');
$rows = $db->resultset();

echo json_encode($rows);

谢谢!

【问题讨论】:

  • Herlon Augusto 是对的 add exit();在代码末尾

标签: javascript php jquery ajax json


【解决方案1】:

在 search.php 中的 echo 之后写一个 exit()。
像这样:

$key = $_POST["query"];
$db = new Database();
$db->query("SELECT * FROM users WHERE firstname LIKE :key OR lastname LIKE :key OR firstname AND lastname LIKE :key");
$db->bind(":key", '%' . $key . '%');
$rows = $db->resultset();

echo json_encode($rows);

exit();

它应该阻止显示整个页面。

【讨论】:

  • 很遗憾,添加 exit() 并没有解决问题
  • search.php 页面上还有其他内容吗?
  • 在 master.php 中没有“search-results”类的 2 个元素?
  • 当您只访问 search.php 时,主内容不会显示,对吧?如果显示,则问题可能出在此页面上。
  • 呜呜呜。我觉得很笨。我包含了 master.php,因为它包含了我构建的一些类的 require 语句。只是完全忽略了它会从母版页输出所有 HTML 的事实......感谢您的帮助!
【解决方案2】:
In search.php before sending $rows in json_encode() give one condition that will check $row is empty or not.like :
if(!empty($res))
    echo json_encode(array('status'=>'success','result'=>$rows));
else
    echo json_encode(array('status'=>'failed','result'=>[]));
In ajax check 
success: function(html)
{
    if(html.status=='success')
    {
            $res.show();
            $res.append(result.html);
            console.log(result.html);
     }
}
may be it will work..

【讨论】:

  • 我确实需要添加这个,但是在我现在正在运行的测试中,我知道$rows 有数据
  • 即使我返回“hello, world!”也会发生这种情况
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多