我正在尝试用CodeIgniter和引导模式构建一个文件管理器(作为文件管理器的弹出按钮单击),其中我列出了目录中的文件夹和文件。尽管第一个加载模式加载了特定目录的子文件夹和文件。当我第一次将.load()函数作为ajax调用使用时发生了这种情况,我希望在单击特定的子文件夹上加载子文件夹、文件和文件夹,但这就好像我犯了很多错误,Codeigniter输入没有返回到ajax请求post数据。我尝试过很多ajax模式,但没有成功。我甚至使用了print_r($_POST);,但返回空数组
这是我的密码:
引导模式:
<div class="modal fade chivins_media" tabindex="-1" role="dialog">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable modal-lg" style="max-width: 87% !important;">
<div class="modal-content">
<div class="modal-header">
<div class="media-buttons float-left">
<ul>
<li><a href="#"><img src="<?php echo base_url('public/icon/svg/folder (1).svg'); ?>" alt="Upload files"></a></li>
<li>+ New Folder</li>
<li>Move</li>
</ul>
</div>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-12 col-md-6 col-lg-9">
<div class="card mb-4 border scrollbar border-warning" id="style-1">
<div class="card-body row force-overflow media-box" style="overflow: scroll; height: 550px">
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>Jquery代码:
$(document).ready(function()
{
var site_url = $('body').attr('data-site-url');
$(".chivins_media").on("show.bs.modal", function(event)
{
$(this).find(".media-box").load(site_url+'medias', function()
{
files_on_click()
load_folder();
function load_folder() {
$('.media-folder').click(function(event) {
var path = $(this).attr('data-folder-path'),
post_data = {'path': path};
$.ajax({
url: site_url+"medias/folderitems/",
type: 'post',
cache: false,
data: {p: path},
success: function(data)
{
console.log(data);
$(this).parents('.media-box').html(data);
files_on_click();
load_folder();
},
error: function(data) {
console.log(data);
}
});
// do the ajax bit
// $.post('ajax_get_preview', post_data, function(theResponse){
// // load the modal window with the relevant content returned
// $('#modal-content').html(theResponse);
// });
// $.post(site_url+"medias/folderitems/", post_data, function(data){
// alert(data);
// }, "html");
});
}
function files_on_click()
{
var files = [];
$(".media-file").click(function(event)
{
var media_id = $(this).find('img').attr('data-file');
if ($(this).hasClass('selected-media')) {
$(this).removeClass('selected-media');
files.splice(files.indexOf(media_id),1);
}
else {
$(this).addClass('selected-media');
files.push( media_id );
}
// console.log( files );
});
}
});
});
});这是我的控制器代码
控制器
public function index()
{
$data = $this->media_manager->scan_dir();
echo $this->media_builder($data);
}
public function folderitems()
{
// print_r($this->input->post());
print_r($_POST);
// $path = $this->input->get('path', true);
// $medias = $this->media_manager->scan_dir($path);
// echo $this->mediabuilder($medias);
}我想一个接一个地列出一个目录的文件和文件夹,按一下按钮
任何帮助都是非常感谢的
发布于 2019-09-18 07:53:07
谢谢大家,我认为我已经解决了我的问题通过多次尝试和错误,但如果你还有一个更好的选择仍然张贴在这里。
我只是对我的代码做了一些调整,方法是用base64_encode加密一个返回值,比如base64_encode,然后用var path = $(this).attr('data-folder-path');检索它,然后只对ajax加载函数进行加密。下面是我的教诲
Jquery
function load_folder() {
$('.media-folder').click(function(event) {
var path = $(this).attr('data-folder-path');
$(this).parents('.media-box').load(site_url+"medias/folderitems/"+path, function(data){
files_on_click();
load_folder();
});
});
}控制器
public function folderitems()
{
$path = base64_decode($this->uri->segment(4));
echo $path; // It returns uploads/images/users
}如果你还有更好的选择发布它。谢谢你的帮忙
https://stackoverflow.com/questions/57978336
复制相似问题