为了在Web应用程序中最好地组织JavaScript AJAX处理程序,我采用了使用AJAX控制器来处理AJAX请求的方法。很简单。
此决定的后半部分是AJAX请求的结果,具体是如何,何地以及是否将返回的JSON /数据添加到DOM元素。将JavaScript DOM操作逻辑放在视图中是否是一个好的(或至少是非愚蠢的想法)?
答案 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);
}
}
}