Можно ли загрузить файл вместе с несколькими данными через iframe? - PullRequest
0 голосов
/ 23 января 2012

Я использую codeigniter и Jquery. У меня есть форма загрузки в моем скрипте view. Форма загрузки состоит из нескольких текстовых вводов и файлового ввода. Форма выскочит, когда кто-нибудь нажмет на ссылку меню (я сделал это с формой Jquery Modal). Можно ли имитировать вызов ajax при отправке формы? поэтому, когда пользователь нажимает кнопку «Отправить», файл отправляется в каталог на сервере, поэтому информация будет храниться в базе данных.

вот мой код: ВИД:

<div id="right_column" class="grid_7 omega">
        <section id="music_features">
            <header>
                <hgroup>
                    <h1>Your Playlist</h1>
                    <p>Up to only 3 files allowed for beta version</p>
                </hgroup>
            </header>
            <p id="song_upload_menu"><?php echo anchor('#', 'Upload Song');?></p>
            <article id="song_upload_form">
                <div id="song_upload_info">
                    <?php echo $this->session->flashdata('info'); ?>
                </div>
                <?php echo form_open_multipart('profile/do_upload_song');?>
                <input type="hidden" id="user_id" name="user_id" value="<?php echo $user->id_str;?>" />
                <label for="title">Song Title</label>
                <input type="text" name="title" id="title" size="30" value="<?php echo set_value('title'); ?>"/><br />
                <label for="album"> Album Title </label>
                <input type="text" name="album" id="album" size="30" value="<?php echo set_value('album'); ?>"/><br />
                <label for="artist">Artist</label>
                <input type="text" name="artist" id="artist" size="20" value="<?php echo set_value('artist'); ?>"/><br />
                <input type="file" name="userfile" size="20" /><br />
                <input type="radio" name="license" id="license" value="owner"/>I AM the artist/owner of this song and I have the right for distribution<br />
                <input type="radio" name="license" id="license" value="not owner"/>I AM NOT the artist/owner of this song BUT I have the right for distribution</br>
                <input type="checkbox" name="song_license_agreement"/>By selecting this option, I swear that all information entered is right<br />
                <input type="submit" id="song_upload_submit" value="Upload Your Song"/>
                </form>
            </article>
            <ul id="playlist">
                <!-- your song goes here -->
            </ul>
        </section>

Это функция в моем контроллере для обработки загрузки:

function do_upload_song()
    {
        //$file_element_name = 'users_song';

        $config['upload_path'] = './media/';
        $config['allowed_types'] = 'mp3';
        $config['max_size'] = '30720';
        $config['encrypt_name'] = TRUE;

        $this->load->library('upload', $config);
        //set validation rules
        $this->form_validation->set_rules('title', 'Song title', 'trim|required|xss_clean');
        $this->form_validation->set_rules('album', 'Album', 'trim|required|xss_clean');
        $this->form_validation->set_rules('artist', 'Artist', 'required|xss_clean');
        $this->form_validation->set_rules('license', 'License', 'required');
        $this->form_validation->set_rules('song_license_agreement', 'License Agreement', 'required');

        if ($this->form_validation->run() == FALSE)
        {
            $this->session->set_flashdata('info', validation_errors());
            redirect('profile');
        }
        else
        {
            if ( ! $this->upload->do_upload())
            {
                $this->session->set_flashdata('info', $this->upload->display_errors());
                redirect('profile');
            }
            else
            {
                $data = $this->upload->data();
                $add_song = $this->media_model->add_song($data['file_name']);
                if($add_song)
                {
                    $this->session->set_flashdata('info', 'Your song has been uploaded');
                    redirect('profile');
                }
                else
                {
                    unlink($data['full_path']);
                    $this->session->set_flashdata('info', 'Song upload fail');
                    redirect('profile');
                }

            }
            @unlink($_FILES);
        }

    }

А это мой .js

$(document).ready(function(){
$('#song_upload_form').hide();
    $('#song_upload_menu').click(function(e){                             
        $('#song_upload_form').dialog({
                        title: 'Upload the cool track man!',
                        width: 520,
                        show: 'fade',
                        hide: 'fade',
                        modal: true
                        });                       
        e.preventDefault();
    });  
});   

Сценарий JS заставляет выскочить модальную форму, но я не знаю, что делать после этого. Я просто могу отправить данные через ajax. Но файл другой. Я знаю, что они не могут быть отправлены через AJAX. Многие статьи, которые я нашел в сети, рассказывали мне о Iframe, но они имеют дело только с файлами. Я не могу найти практического решения для моей проблемы, имитирующей ajax для одновременной отправки данных и файлов. Любой совет, ребята? Спасибо

1 Ответ

2 голосов
/ 23 января 2012

Я просто читал об этом сам.Смотрите здесь: http://joekuan.wordpress.com/2009/06/12/ajax-a-simplified-version-of-file-upload-form-using-iframe/

Там написано, что вы можете перенаправить загрузку формы на скрытый фрейм.Довольно круто.Я сам еще не попробовал, но вы сможете найти всю информацию об этом в Интернете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...