我有一些标签,其内容是我网站的完整功能部分。
例如,在我的管理区域,我有标签[添加/删除相册] [添加照片] [删除照片]。我在技术上通过标签划分管理区域。
我使用ajax将内容加载到这些标签中。标签内容区域是div。
内部标签内容区域的视图也使用ajax加载内容。 这些是在选项卡内容区域内运行的ajax调用。
只要选项卡内容区域内的视图保持相同或仅部分内容发生更改,一切正常。但是当选项卡内容区域内的某些交互返回全新视图时,选项卡内容区域将不会显示它们。
我知道发生的事情是这个返回的新视图没有传递到选项卡内容区域div。
在firebug中,我可以看到ajax success function response显示返回的新视图。 但我不知道如何将新视图传递给标签内容区域。
如果有人可以帮我解释如何解决这个问题,或者如何在CI中管理标签内的内容,我将不胜感激。
adminTabsview.php
<ul id="adminTabs">
<li ><?php echo anchor('#album_addDelete', 'Album Add/Delete'); ?></li>
</ul>
<div id="adminTabsContent"></div>
$(document).ready(function(){
$('#adminTabs a').on({
click: function (evt){
evt.preventDefault();
var page = this.hash.substr(1);
adminTabsAjaxCall(page);
}
});
});
function adminTabsAjaxCall ($data){
$.ajax({
type: "POST",
url: "index.php/adminsite_controller/"+ $data + "/",
dataType: "html",
data: $data,
statusCode: {removed}
},
success: adminTabContent
});
function adminTabContent (data){
$('#adminTabsContent').html(data);
}
albumsEditDeleteView.php
(this is a view that gets loaded into the tab contentarea div)
<div id="adminTabsContent">
<div id="albumList">
<ul>
<li>
<a href="#">Asdf</a>
<a class="add" href="http://localhost/myPHP/photoalbums/index.php/Albums_Controller/add_album/301/Asdf/1/28/0">[ add ]</a>
<a class="delete" href="http://localhost/myPHP/photoalbums/index.php/Albums_Controller/delete_album/301/Asdf/1/28/0">[ delete ]</a>
</li>
</ul>
</div>
</div>
$(document).ready(function(){
$('#albumList').on({
click: function (evt){
evt.preventDefault();
var $clickedElement = evt.target.tagName;
if ($clickedElement == 'A' ){
var urlarray = url.split('/');
$chosen.albumid = urlarray[8];
$chosen.albumname = urlarray[9];
$chosen.lft = urlarray[10];
$chosen.rgt = urlarray[11];
$chosen.nodeDepth = urlarray[12];
if ($class == 'add'){
albumajaxcall($chosen);
}
if ($class == 'delete'){
deleteajaxcall($chosen);
}
}
}
});
});
function albumajaxcall($data){
$.ajax({
type: "POST",
url: "index.php/Adminsite_Controller/add_album/",
dataType: "json",
data: $data,
statusCode: {removed}
},
success: adminTabContent
});
}
function adminTabContent(data){
$('#adminTabsContent').html(data);
}
//heres the view file that has to replace the original view inside
//tabcontent area
//addnode_view.php
<?php echo form_open('Albums_Controller/update_albumSet');?>
<input type="text" name="newAlbum" id="newAlbum" value=""/>
<input type="submit" name="submit" value="Submit" />
<?php echo form_close();?>
<?php
//heres the controller function
function add_album(){
$levelData ['albumid'] = $this->input->post('albumid');
<!-- removed-->
$levelData ['main_content'] = 'addnode_view';
$this->load->view('includes/template', $levelData);
}
//And heres the controller method that loads
//the original page (albumsEditDeleteView.php) - this is the original view
//that gets loaded into the tab- I get stuck when this view
//has to be **totally** replaced through links in the view)
function album_addDelete(){
$allNodes ['myAlbumList'] = $this->Albums_Model->get_albumList();
echo $this->load->view('albumsEditDelete_view', $allNodes);
}
提前完成。
答案 0 :(得分:0)
基本上你需要做的是在处理你的ajax的控制器函数(adminsite_controller /无论什么函数)的选项卡中加载任何新的视图。
这基本上会回显视图文件,视图文件将被视为ajax函数的成功变量。
所以你有类似的东西然后是ajax的成功部分
success:function(msg){adminTabContent(msg);}
并且在codeigniter中的控制器中,您将以标准方式加载视图,但由于这只是加载页面的一部分,您可能需要创建一个新的视图文件,该文件只包含将存在的div。您将以不同于ajax的方式收集所有数据。
$data['some_data'] = $this->some_model->some_function();
$this->load->view('someview', $data);