这个问题更多的是关于"良好的实践和#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请求? (我不想每次刷新页面)。也许可以加速响应和/或提高安全性。
非常感谢!
答案 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)更新我的模型,然后我想显示更新的表,这样我会看到修改后的表吗? 我希望我的问题很明确......:)
非常感谢!