Jquery Codeigniter输入库无法识别ajax post数据
我正在尝试使用CodeIgniter和引导模式构建一个文件管理器(在单击按钮时作为文件管理器的弹出窗口),其中列出了目录中的文件夹和文件。虽然第一次加载模式时加载了特定目录的子文件夹和文件。这是在我第一次使用Jquery Codeigniter输入库无法识别ajax post数据,jquery,ajax,codeigniter,post,input,Jquery,Ajax,Codeigniter,Post,Input,我正在尝试使用CodeIgniter和引导模式构建一个文件管理器(在单击按钮时作为文件管理器的弹出窗口),其中列出了目录中的文件夹和文件。虽然第一次加载模式时加载了特定目录的子文件夹和文件。这是在我第一次使用.load()函数作为ajax调用时发生的,我想在单击特定子文件夹时加载子文件夹文件和文件夹,但就像我犯了很多错误一样,Codeigniter输入没有返回我的ajax请求post数据。我尝试了很多ajax模式,但没有成功。我甚至使用了print\r($\u POST)但返回空数组 这是我的密
.load()
函数作为ajax调用时发生的,我想在单击特定子文件夹时加载子文件夹文件和文件夹,但就像我犯了很多错误一样,Codeigniter输入没有返回我的ajax请求post数据。我尝试了很多ajax模式,但没有成功。我甚至使用了print\r($\u 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>
$(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);
}
public function folderitems()
{
$path = base64_decode($this->uri->segment(4));
echo $path; // It returns uploads/images/users
}
我想在单击按钮时逐个列出目录的文件和文件夹
非常感谢您的帮助,谢谢大家。我想我已经通过多次尝试和错误解决了我的问题,但是如果您还有更好的选择,请仍将其发布在这里
我只是对我的代码做了一些调整,用base64_encode加密返回值,比如uploads/images/users
,然后用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 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);
}
public function folderitems()
{
$path = base64_decode($this->uri->segment(4));
echo $path; // It returns uploads/images/users
}
如果你还有更好的选择,就发吧。感谢您的帮助我找不到class.media folder
和.media file
的按钮。所以我猜它们是通过ajax响应动态添加的。因此,在添加它们之后,您需要再次为它们绑定单击事件,因为当您尝试添加它们时,它们并不存在。另一个选项是查找未动态添加的元素,并使用子选择器将主事件附加到该元素,例如:$(“.modal body”)。在(“click”、“.media file”上,函数(event){…}
尝试其中一个,看看是否有效。(如果请求到达服务器并返回任何内容,请检查控制台网络页面)是的,它们是动态添加到页面的是的,它们是动态添加到页面的。我已经调用了正在工作的函数,但我的主要上下文是,当我单击子文件夹时,它返回错误ajax错误301,而不提交ajax post数据。当我尝试此````$this->input->post('p')时;```或``$`u POST````,它返回空数组