Я обычно обрабатываю 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);
}
}
}