Javascript проблема с формой enctype, загрузить скрипт - PullRequest
1 голос
/ 02 марта 2011

У меня проблема при отправке данных с помощью сценария загрузки.

Впервые скрипт загрузки установлен правильно, все отлично работает. Но мне нужно использовать загруженные данные (через скрипт uploadify) для mysql и других.

Вот мой код для вызова скрипта загрузки:

<script type="text/javascript">
$(document).ready(function() {
$('#file_upload').uploadify({
    'uploader' : '/uplod/uploadify/uploadify.swf',
    'script' : '/uplod/uploadify/uploadify.php',
    'cancelImg' : '/uplod/uploadify/cancel.png',
    'folder' : '/uplod/uploads/',
    'auto' : true,
    'multi' : false,
    'onComplete': function(event, queueID, fileObj, response, data){
        var form = document.forms['form'];
        var i = 0;
        var el = document.createElement("input");
            el.type = "hidden";
            el.name = "test";
            el.id = "test2";
            el.value = fileObj.name;
            form.appendChild(el); },
            'onAllComplete': function(event,data) { document.getElementById('form').submit();},
 });
});
</script> 

Я нашел этот код по адресу: http://www.uploadify.com/forums/discussion/7102/for-all-those-who-struggle-on-inserting-filenames-into-a-db-after-uploading/p1

Речь идет о том, как перезвонить после загрузки файла.

Вот код uploadify.php:

<?php
   if (!empty($_FILES)) {
   $tempFile = $_FILES['Filedata']['tmp_name'];
   $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
   $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
   move_uploaded_file($tempFile,$targetFile);
   echo '0'; // Required to trigger onComplete function on Mac OSX (same for linux and        windows as it seems)

   }
   else { // Required to trigger onComplete function on Mac OSX (same for linux and windows as it seems)
   echo '1';
   $video = $_POST[test];
   $textfield = $_POST[textfield];
   echo $video;
   echo $textfield;
   }
  ?>

А вот форма, которую мне нужно создать, чтобы я мог получить эту работу.

  <form id="form" name="form" method="post" enctype="multipart/form-data" action="uploadify/uploadify.php">
  <input id="file_upload" name="file_upload" type="file" />
  <input type="text" name="textfield" id="textfield" />
  </form>

Проблема здесь, когда я использую enctype="multipart/form-data" uploadify.php пишет мне 0, когда я удаляю enctype="multipart/form-data" пишет мне 1. И это то, что мне нужно. Как вы можете видеть из кода, я поместил некоторый глупый код в конец файла uploadify.php, чтобы проверить его.

Я думаю, что это не работает, потому что в коде javascript я нигде не пишу enctype. может я не прав. Я пытался редактировать это:

            var form = document.forms['form'].enctype  = "multipart/form-data"; 

но ничего,

также я попробовал:

'onAllComplete': function(event,data) { document.getElementById('form').enctype; document.getElementById('form').submit();},

но опять ничего. Любая помощь приветствуется ...

PS Это тестовый пример, для этого кода мне не нужны multipart / form-data, но в проекте, тестирование которого мне нужно multipart / form-data, потому что я тестирую скрипт загрузки для небольшого видео-загрузчика, и мне нужно обложка для каждого видео.

1 Ответ

1 голос
/ 02 марта 2011

Попробуйте:

var form = document.forms['form'];
    form.enctype  = "multipart/form-data"; 

вместо

var form = document.forms['form'].enctype  = "multipart/form-data"; 

Но так как вы не используете мультизагрузку, я не вижу необходимости делать это в 2 шага (сначала отправьте файл, затем полную форму). См. Параметр scriptData , он позволяет отправлять как файл, так и дополнительные данные:

'scriptData'  : {'textfield':$('#textfield').val()}
...