2015-10-23 1 views
0

У меня есть форма, в которой данные отправляют данные через AJAX, а затем обновляет div без перезагрузки всей страницы. Пока хорошо, и все работает отлично.Данные формы сообщения с AJAX и триггер действия PHPExcel с одним отправкой

Моя проблема: мне нужно добавить второе действие к этой форме. Те же значения, но разные действия. Оба действия работают отлично в одиночку, но я просто не могу заставить их работать в одном и том же представлении.

Второе действие - это скрипт, генерирующий xls с PHPExcel и запускающий загрузку.

Как включить в AJAX следующее process_xls.php, так что он запускается с тем же подачей?

process_xls.php

$year = $_POST['year']; 
$nmbr = $_POST['nmbr']; 
$code = $_POST['code']; 

include("excel/PHPExcel.php"); 

$objPHPExcel = new PHPExcel(); 

// .... 
// code creating xls here 
// .... 

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="Summary.xlsx"'); 
header('Cache-Control: max-age=0'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter->save('php://output'); 
exit; 

HTML-:

<div id="container"> 
<form id="form_year" method="post"> 
<input type="hidden" name="year" value="2015"> 
<input type="hidden" name="nmbr" value="22"> 
<input type="hidden" name="code" value="5Tvfr5T"> 
<div class="button-small"><input type="submit" name="" value=""></div> 
</form> 

// .... 
// some data displayed here 
// .... 

</div> 

(класс "button-small" только для CSS)

Javascript

<script type="text/javascript"> 
$(document).ready(function() 
{ 
$(document).on('submit', '#form_year', function() 
{  
    var data = $(this).serialize(); 

    $.ajax({ 
    type : 'POST', 
    url : 'process_year_data.php', 
    data : data, 
    success : function(data) 
    { 
    $("#form_year").fadeOut(500).hide(function() 
    { 
    $("#container").fadeIn(500).show(function() 
    { 
    $("#container").html(data); 
    }); 
    }); 
    } 
    }); 
    return false; 
}); 


}); 
</script> 

Любой высокоэнергетический лазер p очень оценили!

+0

Вы пытаетесь изменить URL-адрес своего вызова AJAX или пытаетесь изменить действие формы? Если вы пытаетесь нажать 'process_xls.php', нужно изменить ajax-url на то, что не будет? – JammyDodger231

+0

На самом деле я хочу, чтобы одна и та же форма представляла два разных действия: для url 'process_year_data.php' с AJAX и после этого для url' process_xls.php' как простое действие post (без AJAX). Возможно ли вообще совместить это в одной форме? – chrimens

ответ

0

Я думаю, что начать с этого было бы лучше, если бы нацелилась только на эту единую форму, а не на просмотр документа и таргетинг на него снова.

Перемещая return false в оператор if, мы гарантируем, что метод по умолчанию формы не будет предотвращен. Существует немного чтения о событии предотвращающего here

$(document).ready(function(){ 
    var posted = false; 
    $('#form_year').submit(function(){ 
     if (!posted) { 
      var data = $(this).serialize(); 
      $.post('process_year_data.php', data, function(data){ 
       $("#form_year").fadeOut(500).hide(function(){ 
        $("#container").fadeIn(500).show(function(){ 
         $("#container").html(data); 
        }); 
       }); 
      }); 
      posted = true; 
      return false; 
     } 
    }); 
}); 

Я также создал JSFiddle, если вы используете инструменты разработчика, вы должны увидеть запрос 404 сети, а затем неудавшийся редирект, снимающее действие.

+0

Это указывает мне путь. Мне просто нужно выяснить, как отправлять те же данные дополнительно к другому php. Спасибо за вашу помощь! – chrimens

+0

Когда вы делаете обычный пост после первого сообщения, он должен отправлять те же параметры, которые находятся в вашей форме :) – JammyDodger231

+1

Добавление второго сообщения не получилось. До тех пор, пока я не узнал, что проблема не в самой функции, а в коде заголовка (...) и «exit» в конце целевого php (необходимо принудительно загрузить). Вместо добавления второго сообщения я добавил 'onclick' в форму, которая просто открывает php как ссылку и передает значения формы' get'. @JammyDodger Еще раз спасибо за то, что вы на правильном пути. Наверное, спас мне часы! – chrimens