Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX发布表单数据,并通过一次提交触发PHPExcel操作_Javascript_Php_Ajax_Form Submit - Fatal编程技术网

Javascript 使用AJAX发布表单数据,并通过一次提交触发PHPExcel操作

Javascript 使用AJAX发布表单数据,并通过一次提交触发PHPExcel操作,javascript,php,ajax,form-submit,Javascript,Php,Ajax,Form Submit,我有一个表单,其中submit通过AJAX发布数据,然后刷新div,而无需重新加载整个页面。到目前为止还可以,而且效果很好 我的问题是:我需要在此表单中添加第二个操作。 相同的价值观,但不同的行动。 这两个动作都能很好地单独工作,但我就是不能让它们在同一时间工作 第二个操作是使用PHPExcel生成xls并触发下载的脚本 如何将下面的进程_xls.php包含到AJAX中,以便使用相同的提交触发它 该进程是xls.php $year = $_POST['year']; $nmbr = $_POST

我有一个表单,其中submit通过AJAX发布数据,然后刷新div,而无需重新加载整个页面。到目前为止还可以,而且效果很好

我的问题是:我需要在此表单中添加第二个操作。 相同的价值观,但不同的行动。 这两个动作都能很好地单独工作,但我就是不能让它们在同一时间工作

第二个操作是使用
PHPExcel
生成xls并触发下载的脚本

如何将下面的
进程_xls.php
包含到AJAX中,以便使用相同的提交触发它

该进程是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>

非常感谢您的帮助

我认为从一开始,最好只针对单一表单,而不是查看文档并再次针对该表单

通过将return false移到if语句中,我们可以确保表单的默认方法不会被阻止。有一些关于事件预防的阅读


我还创建了一个示例,如果您使用开发人员工具,您应该会看到404网络请求,然后会看到一个失败的重定向,该重定向会命中操作。

您是在尝试更改AJAX调用的URL,还是在尝试更改表单的操作?如果你想点击
process_xls.php
的话,需要将ajax url改成这样,不是吗?我实际上希望相同的表单提交到两个不同的操作:使用ajax访问url
process_xls.php
,然后再访问url
process_xls.php
,作为一个简单的post操作(不使用ajax)。这有可能以一种形式结合起来吗?这为我指明了前进的方向。我只需要弄清楚,如何将相同的数据附加到另一个php。谢谢你的帮助!当您在第一篇文章之后执行正常的文章时,它应该发送与表单中相同的参数:)添加第二篇文章不起作用。直到我发现问题不在于函数本身,而在于目标php末尾的
头(…)
代码和
退出(需要强制下载)。我没有添加第二篇博文,而是在表单中添加了一个
onclick
,它只是将php作为链接打开,并通过
get
传递表单值@杰米道奇再次感谢你让我走上正轨。可能帮我省了几个小时!
<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>
$(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;
        }
    });
});