Можно ли отправить HTML-форму, которая включает кнопку отправки через JavaScript? - PullRequest
0 голосов
/ 24 октября 2010

Мне нужно отправить файл через HTTP Post (форму) в несколько пунктов назначения одним щелчком мыши.

Форма имеет кнопку отправки

<input type="submit" id="button1" name="submit" value="upload file">

Атрибут actionи различные различные скрытые поля, которые необходимы, устанавливаются с помощью JavaScript.

После нажатия кнопки 1 файл без проблем отправляется в первый пункт назначения.

Невозможно отправить форму второй раз с другими значениями из-за кнопки отправки.

Я не могу использовать внешнюю кнопку, например

<button id="button1">upload file</button>

Это позволит легко решить проблему (я уже пробовал), но здесь это невозможно.Причина в том, что в конце сообщения нужны эти строки, которые генерируются настоящей кнопкой отправки внутри HTML-формы:

Content-Disposition: form-data; name="submit"

upload file

Мой вопрос: Как я могу отправить форму через JavaScript, которая включает кнопку отправки?Как я могу "нажать" кнопку отправки через JavaScript?

Это мой файл Java Script:

// If frame 1 is loaded, the function prepareUpload() will be executed
$("#frame1").ready(function() {  
   prepareUpload();  
}); 


function prepareUpload(){

     // click-handler is registered to button1
     $('#button1').click(function(){
            // if clicked...
            // "Please Wait" window
            $.blockUI({ css: { 
                border: 'none', 
                padding: '15px', 
                backgroundColor: '#000', 
                '-webkit-border-radius': '10px', 
                '-moz-border-radius': '10px', 
                opacity: .5, 
                color: '#fff' 
            } }); 

            //register load handler on iframe which triggers uploadData() 
            $('#frame1').load(function(){
                // reload from iframe
                uploadData();
            });

            iTargetNumber = 0;
            // call function uploadData()
            uploadData();
            return true;
        });
}


function uploadData() {
    var dataSet = data[iTargetNumber];
    document.getElementById("statusbar").style.width = (iTargetNumber / data.length * 200) + "px";

    // if file is uploaded to all servers...
    if (iTargetNumber == data.length) {
       document.getElementById("statustext").innerHTML = "done";
       // Reload browser window
       document.location.reload();
       return;
    }

    // status message
    document.getElementById("statustext").innerHTML = "uploading to " + dataSet.sUrl;

    //set "action" attribute in HTML form    
    $('#form1').attr('action', dataSet.sUrl);

    //set hidden fields in HTML form   
    for (var key in dataSet){
        $('#' + key).attr('value', dataSet[key]);
    }

    // HERE IT HANGS after the first run is completed because of the submit button.

    //submit HTML form with correct values
    $('#form1').submit();

    // increment variable +1
    iTargetNumber++;
}

// initialize variable 
var iTargetNumber = 0;

Он зависает после отправки первой формы (из-за кнопки отправки).

Использование

var myForm = document.forms.form1
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);

вместо

$('#form1').submit();

тоже не помогает.Полученное сообщение не содержит этих строк:

Content-Disposition: form-data; name="submit"

upload file

Дополнительное скрытое поле, такое как

<input type="hidden" id="submit" name="submit" value="submit">

, которое создаст Content-Disposition: form-data;name = "submit" тоже не помогает, потому что это было бы до содержимого файла и в конце не было бы загружать файл .

================

Проблема решена.Решение состоит в том, что функция JavaScript вызывается кнопкой

<button id="button1">upload file</button>

Внутри формы также есть скрытая кнопка отправки

<input type="submit" style="display:none" id="button2" name="submit" value="upload file">

Функция JavaScript вызывает эту скрытую кнопку отправки.Теперь работает без проблем.

1 Ответ

0 голосов
/ 24 октября 2010

Получение метода отправки из другой формы должно помочь.

var myForm = document.forms.id_of_form;
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...