Предложения по загрузке изображения с использованием jQuery ajax - PullRequest
1 голос
/ 24 июня 2011

У меня есть форма, которая имеет 3 входа:

[1] поле ввода текста для обновления статуса

[2] загрузка файла (для картинки)

[3] поле ввода текста для прикрепления ссылки

Пользователь переключается между каждым в зависимости от того, что он хочет сделать. Например, при выборе [2] входы [1] и [3] скрыты.

Все эти входные данные содержатся в одной форме с идентификатором posts_form. Опции [1] и [3] отправляют через Ajax разные контроллеры.

Моя проблема сейчас связана с опцией [2], поскольку невозможно загрузить изображения с помощью jQuery ajax.

Некоторые решения, которые я видел, включают в себя использование плагина jQuery Form, но мне интересно, можно ли было бы загружать изображения без использования плагина.

Например, это будет база кода для загрузки, которая, конечно, не работает.

    $.ajax({
        url: 'chat/upload/' + <?php echo $page_id; ?>,
        type: 'POST',
        data: $('#posts_form').serialize(),
        dataType: 'html',
        beforeSend: function(){
              $('#loading').show();
            },          
        success: function(html) {
            $('#attach').replaceWith(html);
            $('#loading').hide();
            $('#posts_form input').val('');
            $('.posts_link').val('');
            $('#chat_input').hide();
            }
        });

Любые предложения о том, что можно добавить / изменить, чтобы разрешить загрузку изображений только с использованием jQuery, без плагинов?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Нет простого способа загрузить файл через AJAX.Это ограничение в HTML4.Обходные пути используют iframe или Flash.

В HTML5 для решения этой проблемы введен File API.Вот демонстрация использования этого API (с использованием Firefox 3.6+), который позволяет перетаскивать изображение и загружать его без отправки обратно на сервер: http://html5demos.com/file-api. Он также поддерживает несколько файлов: http://demos.hacks.mozilla.org/openweb/DnD/.

Вы можете прочитать о этой спецификации на W3.org , если вы заинтересованы.

Если вы не можете полагаться на то, что клиенты имеют браузеры, поддерживающие HTML File File API, вы можетелибо сверните свой собственный, либо выберите использование библиотеки, реализующей обходной путь iframe:

1 голос
/ 24 июня 2011

Ваш лучший выбор - этот плагин. Ты тратишь свое время на попытки сделать это без этого.

http://jquery.malsup.com/form/

...