Я использую диалоговое окно jQuery для загрузки представления, которое используется для загрузки файлов в мое приложение. После просмотра файла и нажатия кнопки «Отправить» вызывается контроллер, который обрабатывает файл и передает его моей модели для вставки. Затем модель возвращается к контроллеру успеха (или нет) и загружает новое представление для успеха (или нет).
Я хотел бы, чтобы представление успешного (или нет) рендеринга находилось в том же диалоговом окне jQuery (или открывало новое) вместо вызова / загрузки всего представления.
Буду ли я вызывать / загружать (каким-либо образом) диалоговое окно jQuery из моего контроллера? Или я бы заставил мой контроллер вызывать новое представление, и, как только он загрузится, он будет отображать диалог, в основном отображая себя в диалоге? Надеюсь, это имеет смысл.
Спасибо.
** РЕДАКТИРОВАНИЕ: ДОБАВЛЕННЫЙ КОД НИЖЕ + КОММЕНТАРИИ - Спасибо! **
Мое начальное представление содержит следующую функцию jQuery, которая вызывается, когда пользователь нажимает на якорь («загрузить файл»):
$(document).ready(function(){
function uploadImage(event) {
id = $(this).data('id'); //id is an URL such as ('upload_form'/do_upload/5) it calls my controller (uploadimage), and passes a value (5) to a function (doupload)
$("#dialog").load(id).dialog(); //loads the URL
return false;
}
$('.imageBtn').live('click',uploadImage);
});
Функция, вызываемая контроллером:
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '0';
$config['max_width'] = '212';
$config['max_height'] = '118';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$data['id'] = $this->input->post( 'iEventID', true );
$data['error'] = $this->upload->display_errors();
$this->load->view('admin/upload_form', $data); // If an error is found during file/img upload, then the code reloads the view that was previously loaded into my dialogue. This is where I need the same view to reload in the dialog and present the error message. This currently loads the view in its entirety in a browser window.
}
else
{
$upload_data = $this->upload->data();
$filename = $upload_data['file_name'];
$this->event_model->addEventImage($filename);
$this->load->view('admin/upload_success'); // If all is well, instead of loading the view in its entirety, I want to load the success into the dialog previously popped.
}
}