Codeigniter从视图中操纵DOM?

时间:2011-12-21 22:07:20

标签: php codeigniter jquery

为了在Web应用程序中最好地组织JavaScript AJAX处理程序,我采用了使用AJAX控制器来处理AJAX请求的方法。很简单。

此决定的后半部分是AJAX请求的结果,具体是如何,何地以及是否将返回的JSON /数据添加到DOM元素。将JavaScript DOM操作逻辑放在视图中是否是一个好的(或至少是非愚蠢的想法)?

1 个答案:

答案 0 :(得分:0)

我通常在静态.js文件中处理AJAX和所有JavaScript执行。这样,我可以处理一个请求,无论它是否是ajax,我可以将我的逻辑保存在一个地方。所以,我可能会有以下设置:

// application/controllers/Mycontroller.php
class Mycontroller extends CI_Controller {
    function index()
    {
        $content['text'] = "Lorem ipsum dolor sit amet...";
        $data['content'] = $this->load->view('embeds/home_page', $content, TRUE);
        $this->load->view('public_template', $data);
    }
}

// embeds/home_page.php
<div id="container">
    <h1>Home Page</h1>
    <p><?php echo $text; ?></p>
    <a href="/my_other_controller/method.php">Change Content</a>
</div>

// public_template.php
<html>
<head>
  <title>Home Page</title>
  <script src="/jquery.js"></script>
  <script src="/myscript.js"></script>
</head>
<body>
  <?php echo $content; ?>
</body>
</html>

// myscript.js
$(function(){
    $("#container a").live("click", function(e){
        e.preventDefault();
        $.ajax({
            url: $(this).attr("href"),
            success: function(data) {
                $("#container p").html(data);
            }
        });
    });
});

// my_other_controller.php
class My_other_controller extends CI_Controller {
    function method(){
        if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest") {
            // is an ajax request
            echo "This is new content for the page.";
        } else {
            // is not an ajax request, render whole page
            $content['text'] = "This is new content for the page.";
            $data['content'] = $this->load->view('embeds/home_page', $content, TRUE);
            $this->load->view('public_template', $data);
        }
    }
}