如何击败我的CodeIgniter不良做法
How to beat my CodeIgniter bad practices
从视图中访问函数?我知道正确的方法应该是控制器处理所有函数调用,但是如果我需要调用另一个函数并在视图中的循环中传递来自数据库数据的变量,例如。
视图:
if($persons != ""){
foreach($persons as $p){
echo $p->name;
echo $p->lastname;
// Now I need to call a function and pass parameters from loop
$is_banned = $this->model_users->checkIfBanned($p->name);
echo $is_banned;
}
}
我应该如何在控制器中以正确的方式执行此操作?
另一件事是javascript ajax调用。当我需要接收多个响应时,我一直在控制器中放置大量 javascript。例如,如果我需要通过 ajax 从用户那里获取所有帖子并获得更新帖子div 的响应,以及获取帖子数量并更新帖子计数div。
我一直在做的错误方式:例如。.js:
function insertNewPost(){
var the_text = $('#post_text_input').val();
if(the_text != ""){
$.ajax({
type:"POST",
url:base_url+"controller/insertNewPost",
data: {post_text: the_text},
cache:false,
success:function(response){
$('#post_output').prepend(response);
$('#post_text_input').val('');
}
});
}
控制器:
function insertNewPost(){
if($this->session->userdata('is_logged_in')){
$this->load->model('model_users');
$this->load->model('model_posts');
$email = $this->session->userdata('email');
$myid = $this->model_users->getUserId($email);
$post_text= $this->FilterData($this->input->post('post_text'));
if($this->model_posts->insertNewPost($myid,$post_text)){
$count = $this->model_posts->countPosts($myid);
echo 'More recent: '.$post_text;?>
<script>
var count = "<?php echo $count;?>";
$('#posts_count').html(count);
</script>
<?php
}
}else{
redirect("inicio");
}
}
是否可以同时获得 2 个响应并同时更新 2 个div 的内容?我将如何获取$count
变量并将其传递给相同的 ajax 响应?
任何灯棚都会非常大。提前致谢
正如@charlietfl所建议的:
已更改控制器:
function insertNewPost(){
if($this->session->userdata('is_logged_in')){
$this->load->model('model_users');
$this->load->model('model_posts');
$email = $this->session->userdata('email');
$myid = $this->model_users->getUserId($email);
$post_text= $this->FilterData($this->input->post('post_text'));
if($this->model_posts->insertNewPost($myid,$post_text)){
$content = 'More recent: '.$post_text;
$count = $this->model_posts->countPosts($myid);
$items = array($content,$count);
echo json_encode($items);
}
}else{
redirect("inicio");
}
}
并更改了js函数:
function insertNewPost(){
var the_text = $('#post_text_input').val();
var post_count = '#posts_count';
if(the_text != ""){
$.ajax({
type:"POST",
url:base_url+"controller/insertNewPost",
data: {post_text: the_text},
cache:false,
success:function(response){
var content = json_encode(response);
$('#post_output').prepend(content[0]);
$(post_count).html(content[1]);
$('#post_text_input').val('');
}
});
}
它没有发生,我一定做错了什么。
对于您的第一个问题:
你做的方式没关系。但我不推荐它,因为它对程序员不友好。
您可以通过多种方式解决它。
这是您想要的一种解决方案。
在获取人员后以这种方式在视图发送数据之前处理您的控制器
for($i=0;$i<sizeof($persons);$i++)
{
$persons[$i]->is_banned=$this->model_users->checkIfBanned($persons[$i]->name);
}
现在将此新$persons发送到您的视图。您的新视图代码将如下所示
if($persons != "")
{
foreach($persons as $p)
{
echo $p->name;
echo $p->lastname;
echo $p->is_banned;
}
}
希望你明白这一点。对于第二个问题,您可以使用@charlietfl解决方案。
以下是摘要:
而不是调用多个 ajax 调用 - 调用一个 ajax 并将所有结果作为数组返回。喜欢
function insertNewPost()
{
//do your stuff;
$data['content']="something";//it may be anything array,string
//do your stuff;
$data['count']="something";
//do your stuff;
$data['moreresult']="something";
header('Content-type: application/json');
echo json_encode($data);
exit();
}
现在在你的js
function insertNewPost()
{
var the_text = $('#post_text_input').val();
if(the_text != "")
{
$.ajax({
type:"POST",
url:base_url+"controller/insertNewPost",
data: {post_text: the_text},
dataType: "JSON",
success:function(response){
//here you will get datas as response.content,response.count,response.moreresult
//Now use them as you want as example
$('#post_output').prepend(response.content);
$('#post_text_input').val(response.count);
$('#anotherid').val(response.moreresult);
}
});
}
希望对您有所帮助。
相关文章:
- 使用codeigniter的多链下拉列表
- 在CodeIgniter视图中将Javascript或jQuery代码作为PHP文件编写可以吗
- Codeigniter会话概念简要说明
- 当达到codeigniter/tank auth会话超时时,在ajax调用中处理php重定向
- 如何解析结构不良的 html 代码
- 如何使用post和ajax加载视图Codeigniter
- 如何在使用ajax提交的codeigniter中使用form_validation验证表单数据
- 在codeigniter中具有控件的looper.js
- codeigniter ajax中的gzip压缩不起作用
- Codeigniter:通过Ajax上传图像并存储在数据库中
- 在codeigniter目录中放置javascript文件的位置
- javascript从codeigniter转换为jsp
- CodeIgniter:用于获取包括图像在内的值的控制器
- jQuery日期选择器在Codeigniter和Bootsrap模式表单中不起作用
- 从javascript调用codeigniter方法并传递数据
- CKEditor TypeError:c[a]在CodeIgniter中未定义
- codeigniter HMVC ajax上的更新功能
- 拖放操作会产生不良结果
- Codeigniter JQuery在JQuery.get请求后动态加载视图中的数据
- 如何击败我的CodeIgniter不良做法