Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скачать 2х генерируемых файла одновременно (https://javascript.ru/forum/misc/65576-skachat-2kh-generiruemykh-fajjla-odnovremenno.html)

wild_mind 26.10.2016 22:53

Скачать 2х генерируемых файла одновременно
 
Здравствуйте!
Необходимо, чтобы по нажатию одной кнопки в браузере данные формы передавались 2м разным скриптам, которые по результатам работы отдают 2 файла (*.rtf,*.pdf).
Собственно, особо не раздумывая, просто повесил
<div class=\"button\" align=\"center\" onclick=\"print_accept_orders();\">Печать накладной</div>

function print_accept_orders()									//Печатаем накладную на приемку заказов .rtf
{
	document.accept_orders_form.action = "php/print_rtf.php";
	document.accept_orders_form.submit();
	print_pdf_notes();
}
function print_pdf_notes()  //генерируем .pdf
{
        
	document.accept_orders_form.action = "php/print_pdf.php";
	document.accept_orders_form.submit();
}


Как результат, в Firefox,IE10,Edge - работает
в Crome,Opera - нет. Выполняется только print_cdek_notes(), а первый файл сбрасывается.

Подскажите, пожалуйста, как пофиксить?

Aetae 26.10.2016 23:05

Строго говоря, то что где-то работает - это неправильно: после submit ничего работать не должно, т.к. страница меняется.
Самое простое - перенаправить в отдельное окно:
function print_accept_orders(){
    var form = document.accept_orders_form;

    form.action = "php/print_rtf.php";
    form.target = "print_rtf";
    form.submit();
      
    form.action = "php/print_pdf.php";
    form.target = "print_pdf";
    form.submit();
}

wild_mind 26.10.2016 23:22

К сожалению, тоже самое.
Загружается только второй файл.
В вашем примере - pdf
Если поменять местами
function print_accept_orders(){
    var form = document.accept_orders_form;

    form.action = "php/print_pdf.php";
    form.target = "print_pdf";
    form.submit();

    form.action = "php/print_rtf.php";
    form.target = "print_rtf";
    form.submit();
}

то .rtf

Aetae 27.10.2016 00:11

Понятно. Это тупая защита от спама рекламными окнами, больше одного в n секунд хром не откроет.
Решение зависит от того что должны выдавать эти ваши принт страницы. Например если сразу запрос на печать\сохранение, можно добавить скрытые фреймы в которые и отправлять результат:
<iframe name='print_pdf'></iframe>
<iframe name='print_rtf'></iframe>

Если же нет - только эксперимент или гугл.)

Vlasenko Fedor 27.10.2016 00:17

function buildElement(tagName, props) {
  var element = document.createElement(tagName);
  for (var propName in props) element[propName] = props[propName];
  return element;
}

function submit(link, props, callback) {
  var iframe = buildElement('iframe'),
    iframeDoc = iframe.contentDocument || iframe.contentWindow.document,
    form = buildElement('form', {
      method: 'post',
      action: link
    });
  for (var propName in props) form.appendChild(
    buildElement('input', {
      type: 'hidden',
      name: propName,
      value: props[propName]
    })
  );
  iframe.style.display = 'none';
  document.body.appendChild(iframe);
  iframeDoc.body.appendChild(form);
  form.submit();
  if (typeof callback === "function") {
    iframe.onload = function() {
      callback((this.contentDocument || this.contentWindow.document).body.innerHTML);
      document.body.removeChild(iframe);
    };
  } else {
    document.body.removeChild(iframe);
  }
}

btn.onclick = function() {
  submit('php/print_pdf.php', {
    target: 'print_pdf'
  });
  submit('php/print_rtf.php', {
    target: 'print_rtf'
  });
};

сам не пробовал, но походу должно работать

wild_mind 27.10.2016 11:32

Цитата:

Сообщение от Aetae (Сообщение 433055)
Понятно. Это тупая защита от спама рекламными окнами, больше одного в n секунд хром не откроет.
Решение зависит от того что должны выдавать эти ваши принт страницы. Например если сразу запрос на печать\сохранение, можно добавить скрытые фреймы в которые и отправлять результат:
<iframe name='print_pdf'></iframe>
<iframe name='print_rtf'></iframe>

Если же нет - только эксперимент или гугл.)

Огромное спасибо! Это сработало.
<iframe name='print_pdf'></iframe>
<iframe name='print_rtf'></iframe>


Часовой пояс GMT +3, время: 12:48.