【问题标题】:Codeigniter input library not recognising ajax post dataCodeigniter 输入库无法识别 ajax 发布数据
【发布时间】:2019-09-17 16:21:22
【问题描述】:

我正在尝试使用 CodeIgniter 和引导模式构建文件管理器(作为单击按钮时文件管理器的弹出窗口),我在其中列出目录中的文件夹和文件。虽然模态的第一次加载加载了特定目录的子文件夹和文件。当我第一次使用 .load() 函数作为 ajax 调用时发生这种情况,我想在单击特定子文件夹时加载子文件夹文件和文件夹,但这就像我犯了很多错误,Codeigniter 输入不是返回我的 ajax 请求发布数据。我尝试了很多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">&times;</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 Ajax 代码:

    $(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);
        }

我想在按钮单击时一个接一个地列出目录的文件和文件夹

感谢任何帮助

【问题讨论】:

  • 我找不到类 .media-folder.media-file 的按钮。所以我猜它们是通过ajax响应动态添加的。因此,在您添加它们之后,您需要再次为它们绑定 click 事件,因为当您尝试添加它们时它们并不存在。另一种选择是找到一个未动态添加的元素,并使用子选择器将主事件附加到它,例如:$(".modal-body").on("click", ".media-file", function(event){...} 尝试其中一个,看看是否有效。 (如果请求到达服务器并返回任何东西,还要检查控制台网络页面)
  • 是的,它们是动态添加到页面中的
  • 是的,它们是动态添加到页面中的。我已经调用了正在工作的函数,但我的上下文是,当我单击子文件夹时,它返回错误 ajax 错误 301,而没有提交 ajax 发布数据。当我尝试这个``` $this->input->post('p'); ``` 或 ``` $_POST ```,返回空数组

标签: jquery ajax codeigniter post input


【解决方案1】:

谢谢大家,我想我已经通过多次尝试和错误解决了我的问题,但如果你还有更好的选择,仍然在这里发布。

我刚刚对我的代码进行了一些调整,方法是使用 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 folderitems()
        {
            $path = base64_decode($this->uri->segment(4));
            echo $path; // It returns uploads/images/users
        }

如果您还有更好的选择,请发布。感谢您的帮助

【讨论】:

    猜你喜欢
    • 2018-10-14
    • 2015-11-17
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多