使用ajax调用将一个php页面插入div(jquery)

时间:2015-10-17 10:56:14

标签: php jquery ajax

这个问题更多的是关于"良好的实践和#34;而不是真正的问题;我刚开始使用php和jquery,但我会详细了解我正在做什么以及为什么。

我想要获取的内容:捕获用户请求(带有表单),查询数据库,然后在表中显示结果。全部使用ajax调用和jquery。

现在,我有了我的controller.php:

class Controller {
public $model;
public function __construct() {
    $this->model = new Model ();
}

public function run() {
    $action = isset ( $_REQUEST ["action"] ) ? $_REQUEST ["action"] : $action = "home";

    switch ($action) {
        case "home" :
            //doing stuff
            break;
        case "search" :
            //this function will take arguments then perform a query and return results.
            $result = $this->search();

            //I put $result into a $prod field of my model.
            $this->model->prod = $result;

            //then I would display acquired data into a table.
            echo include 'view/include/result-table.php';
            break;
    }
}

function search() {
    //query DB etc..
}

}

这是我的表(view / include / result-table.php),我想将其插入到页面中的div中。

            <?php
        if (isset ( $this->model->prod )) {
            if (count ( $this->model->prod ) == 0) {
                echo "<h4 class=\"info\"> No product find";
            } else {
                ?>
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Price</th>
                    <th>Descr</th>
                    <th>Qty</th>
                </tr>
            </thead>
            <tbody>
            <?php
                foreach ( $this->model->prod as $p ) {
                    echo "<tr><td> $p->id </td>";
                    echo "<td>" . ucfirst ( $p->name ) . "</td>";
                    echo "<td>" . ucfirst ( $p->descr ) . "</td>"
                    // and so on..
                }
                ?>
            </tbody>
        </table>

        <?php
            }
        }
        ?>

问题1:&#34; echo包括&#34; view / include / .... php&#34;似乎在页面末尾(或div)也回响了1(一个数字)。为什么呢?

&#34;问题2&#34;:这很有效,但我不确定这是否正确。有没有其他解决方案来查询数据库并在div中显示结果,只有jquery / ajax请求? (我不想每次刷新页面)。也许可以加速响应和/或提高安全性。

非常感谢!

2 个答案:

答案 0 :(得分:0)

对于问题1:include不需要回声。它包括内容和回声都在包含的php文件中。所以回声包括实际上是回应包含的结果,这是真的,或者是成功的结果。

问题2:你是对的,ajax将是一个没有刷新整个页面的解决方案。您需要做的就是向您的php脚本发出ajax请求,该脚本只返回您要替换的html内容,并将此结果附加到您的html dom。 jQuery有很多函数可用于进行ajax调用并将结果附加到你的html dom中。

一个好的做法是不返回原始html内容,只是将其附加到您的网站,因为如果出现问题,您可能会收到来自php或警告的错误代码,甚至是mysql错误,当然这些错误在您的网站上显示不好。因此,为了告诉你的ajax请求结果是预期的,只需发送一个值为true的状态标志。执行此操作的一种好方法是将结果作为json编码的字符串发送,如下所示:

{
    status : true,  //shows you your call was successfull
    html : "your result html to place on your site"
}

只有当您的ajax调用返回正确的状态(true)时,一切都进展顺利,您可以将其插入页面。

答案 1 :(得分:0)

我不知道如何添加评论并保持格式化......无论如何:

感谢您的回复。

我不明白最后一部分,现在我有我的ajax电话:

$('#submit-btn').click(function(event) {

event.preventDefault(); 

$.get("index.php", {action : "search" , data : mydata }).done(function(data) {
$('#result').html(data); 

});

删除回声1消失了,但我不明白你正在谈论的旗帜以及我应该编码的内容。我要追加的页面?只有查询的结果?

查询数据库后,我用新值(来自db)更新我的模型,然后我想显示更新的表,这样我会看到修改后的表吗? 我希望我的问题很明确......:)

非常感谢!