Невозможно опубликовать определенные данные с помощью плагина jQuery Form ajaxForm

Я пытаюсь использовать эти 2 плагина jQuery: plupload и Плагин формы jQuery ajaxForm.

Он работает нормально, за исключением одного: я не могу отправить имя файла (с помощью ajaxForm) файла, ранее загруженного с помощью plupload.

Немного поясняю: пользователь отправляет файл с помощью plupload. Файл загружен. Это работает нормально.

Затем пользователь отправляет форму с помощью ajaxForm и отправляет данные формы + имя файла с помощью метода post.

Я знаю, как отправлять данные с помощью ajaxform, этот код отлично работает:

var value1 = "dynamic_value1";
$('#my_form').ajaxForm({ 
        // datas is sent in post method, it works fine
        data: { value1: value1 }, 
        beforeSubmit: validate,
            success: function() { 
            // it's ok :
            //alert(value1);
        } 
    });

Но я не могу сделать это с pluplopad file.name, я могу видеть имя файла, если я сделал предупреждение, но я не могу его отправить:

Загрузите код для получения имени файла (работает): var file_name_vous;

uploader.bind('FileUploaded', function(up, file, response) {

            // It's ok : i can get file name, alert show me the file name
            file_name_vous = encodeURIComponent(file.name);
            alert(file_name_vous);
        //};
    });
});

Но я не могу этого сделать, этот код не работает:

$participer_form.ajaxForm({ 
        type: 'POST',
        data: { 
        // impossible to send this var
        file_name_vous: file_name_vous
        }, 
        beforeSubmit: validate,

            // success 
            success: function() { 
                // It's ok, alert shows the file name 
                alert(file_name_vous);    
        } 
    });

Так что я не понимаю, я могу отправлять данные почтовым методом, я его тестировал. Но я не могу отправить этот конкретный var : file_name_vous = encodeURIComponent(file.name);

Знаете ли вы, что я должен сделать с (file.name), прежде чем пытаться отправить его почтовым методом?

У меня нет ошибки, просто в сетях firebug / XHR я ничего не вижу об этом var. Если я заменю эту переменную на переменную value1 = "dynamic_value1", это сработает. так что я думаю, моя проблема связана с этим partuliar var file.name


person Sébastien Gicquel    schedule 19.02.2013    source источник
comment
Почему вы используете plupload??? Плагин Malsups Ajax Form поддерживает загрузку через AJAX, на самом деле он поддерживает это наилучшим образом, он создает данные, которые браузер создает при отправке формы с загрузкой файла в них, вам не нужен другой, если вы хотите, чтобы прогресс ваших загрузок был убедитесь, что плагин формы AJAX поддерживает это   -  person Barkermn01    schedule 19.02.2013
comment
что касается моего последнего комментария, о загрузке файла через форму ajax см. этот вопрос stackoverflow.com/questions/9883564/   -  person Barkermn01    schedule 19.02.2013
comment
Я предполагаю, что file_name_vous заполняется значениями после отправки.   -  person Ravi    schedule 19.02.2013
comment
@Ravi Я не уверен, что file_name_vous заполняется значениями после отправки, потому что alert(file_name_vous); все в порядке, когда я его создаю, и все в порядке после того, как форма успешно отправлена: function ()   -  person Sébastien Gicquel    schedule 19.02.2013
comment
@MartinBarker Спасибо за совет. Я попробую варианты загрузки формы Malsups Ajax. Я использовал plupload, потому что я пробовал несколько плагинов, и этот был прост в использовании, и он поставляется со всеми файлами php.   -  person Sébastien Gicquel    schedule 19.02.2013
comment
jsfiddle.net/PHzxy вот пример с использованием индикатора выполнения, с помощью malsups он работает с нативной формой php представление $_GET, вот пример использования стандартной сборки формы, которая работает, затем добавьте к ней форму AJAX, после чего вы получите лучшее понимание того, что делает ваш php и как это делается, tizag.com/phpT/fileupload.php   -  person Barkermn01    schedule 19.02.2013
comment
У меня была такая же проблема с ajaxForm. Он создает данные: { value1: value1 } при загрузке, поэтому вы не можете их изменить. Я отказался от чего-то вроде этого $('#my_form').ajaxForm({ url : 'site.com/?value1=value1'});   -  person dikirill    schedule 19.02.2013
comment
@dikirill Спасибо, я также думаю, что проблема связана с ajaxForm. Я трижды проверил, и данные, которые я пытаюсь отправить, существуют.   -  person Sébastien Gicquel    schedule 20.02.2013


Ответы (1)


Возможно, вам следует исключить часть данных вашей формы ajax и просто создать скрытое поле после успешной загрузки, которое будет отправлено вместе с вашей формой.

Что-то вроде этого :

uploader.bind('FileUploaded', function(up, file, response) {

            // It's ok : i can get file name, alert show me the file name
            file_name_vous = encodeURIComponent(file.name);
            // maybe you'll have to check if hidden filed already exists
            $participer_form.Append($('<input type="hidden" value="'+file_name_vous+'" id="file_name_vous" name="file_name_vous"/>'));
        //};

Надеюсь, это поможет

Кстати, вы пробовали это, чтобы установить значение как можно позже?

uploader.bind('FileUploaded', function(up, file, response) {

            // It's ok : i can get file name, alert show me the file name
            file_name_vous = encodeURIComponent(file.name);
    $participer_form.ajaxForm({ 
            type: 'POST',
            data: { 
            // impossible to send this var
            file_name_vous: file_name_vous
            }, 
            beforeSubmit: validate,

                // success 
                success: function() { 
                    // It's ok, alert shows the file name 
                    alert(file_name_vous);    
            } 
        });
    });
person jbl    schedule 20.02.2013
comment
Спасибо, это именно то, что я сделал: file_name = encodeURIComponent(file.name); $('вход#имя_файла').val(имя_файла); Это показывает, что проблема связана с ajaxForm, потому что в этом случае нет проблем с именем файла. - person Sébastien Gicquel; 20.02.2013
comment
@SébastienGicquel, возможно, вы можете попробовать установить значение позже в процессе. Добавил еще один вариант в мой ответ - person jbl; 20.02.2013
comment
Большое спасибо, это работает! Я потратил на это пару часов, и, наконец, это была логическая проблема. - person Sébastien Gicquel; 20.02.2013