获取ajax POST请求时,php不执行任何操作

时间:2015-05-24 17:16:44

标签: php jquery ajax

我有一个简单的php网站,显示存储在我的数据库中的文章的showreel。我希望能够点击文章标题<h1 class="article-title">并仅显示该文章。

我认为最简单的方法是在网站加载时检查发布请求。如果它有一个带有文章标题的请求,它将只显示该文章,如果没有,它将显示整个Feed。

单击标题后,我可以在控制台中看到POST请求,但没有任何反应,我无法弄清楚原因。我甚至不知道我的数据是否正确发布。

我第一次做这样的事情,所以感谢你的帮助。

我还在我粘贴的代码中将数据库设置更改为空白。谢谢你的帮助

<?php
$page_title = "Articles";
include('inc/header.php');

$servername = "";
$username = "";
$password = "";
$dbname = "";
?>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $conn = new mysqli($servername, $username, $password, $dbname);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT * FROM Articles WHERE title = " . $_POST;
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo 
                "<h1 class='article-title'>" . $row["title"] . "</h1>" 
                . "<h2>" . date("j. F, Y", strtotime($row['post_date'])) . "</h2>" 
                . "<p>" . nl2br($row["extract"]) . "</p><hr>";
        }
    } else {
        echo "0 results";
    }
    $conn->close();
}
else {
    //make article newsfeed

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT * FROM Articles";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo 
                "<h1 class='article-title'>" . $row["title"] . "</h1>" 
                . "<h2>" . date("j. F, Y", strtotime($row['post_date'])) . "</h2>" 
                . "<p>" . nl2br($row["extract"]) . "</p><hr>";
        }
    } else {
        echo "0 results";
    }
    $conn->close();
}
?> 
<?php
include('inc/footer.php');
?>
<script>
    $( ".article-title" ).click(
        function() {
            var title = $(this).text();

            var xhr;
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            }
            else if (window.ActiveXObject) {
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            }
            else {
                throw new Error("Ajax is not supported by this browser");
            }

            xhr.open('POST', 'articles.php');
            xhr.send(title);
        }
    );
</script>

2 个答案:

答案 0 :(得分:0)

php中的

$_POST是一个数组,所以这一行不正确:

$sql = "SELECT * FROM Articles WHERE title = " . $_POST;

一些建议:

在调试过程中总是很好看看$ _POST数组中的实际内容,尝试使用print_r($_POST);将整个数组转储到屏幕上。

查看在执行mysqli查询时如何执行绑定参数,并将标题绑定到查询而不是使用.进行字符串连接。因为它很容易受到sql注入。

在JS中设置title参数时,请尝试将其设为名称值对:var title = 'title=' + $(this).text();。然后在php中标题将在$_POST['title']

答案 1 :(得分:0)

这是对外部页面的简单jquery调用。

<script type="text/javascript">
      $( ".article-title" ).click(function(){
           var title = $(this).text();
            $.ajax({
                type: "POST",
                url : "articles.php",
                 data: { 
                'title': title, 
            },
                success : function(data)
                {
                console.log(data);
                $("#content").html(data);
                }
            },"json");
        });
</script>

这里为了测试目的,你回应你得到的价值

即,echo $_POST['title'];

在您的控制台中,您应该获得title

中的内容

如果可以,您可以使用ID为result的div来获取这些值,