Мне нужно отправить файл через 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 вызывает эту скрытую кнопку отправки.Теперь работает без проблем.