PHP jQuery .ajax () файл загрузки на стороне сервера понимание - PullRequest
1 голос
/ 13 декабря 2011

У меня есть HTML-форма, которая ранее использовалась только для текстовых атрибутов для пользователей. Все они использовали AJAX для вызова функций контроллера PHP через URL-адреса для обновления содержимого страницы с помощью вызовов базы данных и вызовов на стороне сервера (сокращенная версия)

 <input type="text" id="firstname" name="FIRSTNAME"/>
 <input type="text" id="lastname" name="LASTNAME"/>
 <input name="Submit"type="submit" value="Submit" />

Эта форма «создания пользователя» теперь должна включать механизм загрузки файлов для пользовательских изображений

 <input type="file" name="userImage" />

Проблема заключается в том, что форма отправляется через .serialize в .ajax #create form submit

        $.ajax({
            url: 'controller.php?command=create',
            type: 'POST',
            data: $( form ).serialize(),

создание URL-вызовов для контроллера PHP echo $dmv->create();, который является моделью public function create(){ //execute database insert and execute

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

Я попытался понять плагин jquery.form.js (http://malsup.com/jquery/form/#file-upload)но не могу понять, как все это связать.

Я считаю, что мне нужно сделать, чтобы загрузка файла выполнялась как отдельная логика, а затем была привязана к источникуПо логике имени файла, это хранилище файлов с уникальным именем изображения, которое хранится в базе данных под записью, а не хранилище BLOB-изображений.

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

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

Вы не можете загружать файлы через AJAX. Единственные возможности, которые у вас есть, - это использование Flash (например, Uploadify: http://www.uploadify.com/), iFrame, или просто отправка формы. Для формы должен быть установлен тип составного элемента multipart.

<form action="script.php" method="post" enctype="multipart/form-data">

Плагины могут имитировать загрузку файлов AJAX, создавая «скрытый» iframe. Пример: http://valums.com/ajax-upload/

1 голос
/ 13 декабря 2011

Вы можете имитировать вызов AJAX, используя скрытый iframe.Вы даже можете выполнить функцию обратного вызова и получить ответ сервера, как и вызов AJAX:

HTML -

<form enctype="multipart/form-data" target="workFrame"></form>
<iframe id="workFrame" style="display:none;"></iframe>

JS -

//bind an event handler to the form with the file input
$('form').on('submit', function () {

    //check to make sure the user has selected an image, if not then stop the form from submitting
    if ($('#userImage').val().length == 0) return false;

    //bind an event handler to the `load` event for the iframe so we will have a callback for the form submission
    $('#workFrame').on('load', function () {
        var $this = $(this);

        //remove this event handler
        $this.off('load');

        //get the response from the server
        var response = $this.contents().find('body').html();
        //you can now access the server response in the `response` variable
    });

    //return true so the form submits normally
    return true;
});

Обратите внимание, что.on() является новым в jQuery 1.7 и совпадает с .bind() в этом случае.

0 голосов
/ 13 декабря 2011

Вот пример того, о чем говорит Майкл.http://www.phpletter.com/Our-Projects/AjaxFileUpload/

...