Codeigniter манипулировать DOM из поля зрения? - PullRequest
1 голос
/ 22 декабря 2011

Чтобы лучше организовать обработчики JavaScript AJAX в веб-приложении, я использую контроллер AJAX для обработки запросов AJAX. Достаточно просто.

Вторая половина этого решения является результатом запроса AJAX и, в частности, как, где и если возвращенные данные JSON / добавляются в элементы DOM. Хорошо ли (или, по крайней мере, не глупо) помещать логику манипулирования DOM JavaScript в представление?

1 Ответ

0 голосов
/ 23 декабря 2011

Я обычно обрабатываю AJAX и все JavaScript-исполнения внутри статического файла .js. Таким образом, я могу обработать запрос, будь то 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...