Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.10.2016, 22:53
Новичок на форуме
Отправить личное сообщение для wild_mind Посмотреть профиль Найти все сообщения от wild_mind
 
Регистрация: 26.10.2016
Сообщений: 3

Скачать 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(), а первый файл сбрасывается.

Подскажите, пожалуйста, как пофиксить?
Ответить с цитированием
  #2 (permalink)  
Старый 26.10.2016, 23:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Строго говоря, то что где-то работает - это неправильно: после 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();
}
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 26.10.2016, 23:22
Новичок на форуме
Отправить личное сообщение для wild_mind Посмотреть профиль Найти все сообщения от wild_mind
 
Регистрация: 26.10.2016
Сообщений: 3

К сожалению, тоже самое.
Загружается только второй файл.
В вашем примере - 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
Ответить с цитированием
  #4 (permalink)  
Старый 27.10.2016, 00:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

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

Если же нет - только эксперимент или гугл.)
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 27.10.2016, 00:17
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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'
  });
};

сам не пробовал, но походу должно работать
Ответить с цитированием
  #6 (permalink)  
Старый 27.10.2016, 11:32
Новичок на форуме
Отправить личное сообщение для wild_mind Посмотреть профиль Найти все сообщения от wild_mind
 
Регистрация: 26.10.2016
Сообщений: 3

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

Если же нет - только эксперимент или гугл.)
Огромное спасибо! Это сработало.
<iframe name='print_pdf'></iframe>
<iframe name='print_rtf'></iframe>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не удается подключить javascript-код из отдельного файла Mack Events/DOM/Window 1 07.03.2015 17:05
Как изменить имя скачиваемого файла? Dimaz Общие вопросы Javascript 4 13.09.2014 16:25
drag-and-drop и position:fixed dotwatt Элементы интерфейса 5 05.12.2012 08:44
Подгрузка информации через DIV с обработкой файла на стороне сервера Azartno jQuery 1 26.05.2012 15:07
JQUERY - как скачать данную библиотеку? Golovastik jQuery 7 06.03.2011 18:03