Php 如何运行laravel函数并通过ajax传递字段val

Php 如何运行laravel函数并通过ajax传递字段val,php,jquery,ajax,laravel-4,Php,Jquery,Ajax,Laravel 4,嘿,我想在我的控制器中运行一个函数,使用$.get传递我想要执行查询的cod,然后创建我的excel文件 我的路线,如果我在浏览器的地址栏中输入我的文件下载,那就行了 Route::get('relatorios/exportar', array('as' => 'relatorios.exportar', 'uses' => 'ReportsController@exportar')); 我的控制器:请注意,如果我将Input::get('cod')更改为任意数字,则该选项将起作

嘿,我想在我的控制器中运行一个函数,使用$.get传递我想要执行查询的cod,然后创建我的excel文件

我的路线,如果我在浏览器的地址栏中输入我的文件下载,那就行了

Route::get('relatorios/exportar', array('as' => 'relatorios.exportar', 'uses' => 'ReportsController@exportar'));
我的控制器:请注意,如果我将Input::get('cod')更改为任意数字,则该选项将起作用

public function exportar()
    {   
        $cod = Input::get('cod');  

        set_time_limit(0);
        $datainicio = DB::table('tb_periodo')->where('cod', $cod)->pluck('periodo_inicio'); 
        $datafinal  = DB::table('tb_periodo')->where('cod', $cod)->pluck('periodo_fim');
        $mes  = DB::table('tb_periodo')->where('cod', $cod)->pluck('mes_referencia'); 

        $horarioQuery = $this->horario->with(array('funcionario', 'item_contabil'))
                            ->whereBetween('data', array($datainicio, $datafinal))
                            ->whereNull('deleted_at')
                            ->orderBy('cod_funcionario')
                            ->orderBy('data', 'ASC')
                            ->get();

        $horarios = reset($horarioQuery);

        $nome = 'Marcações'.$mes.'-'.Carbon::now()->year;

        $this->horario->allToExcel($nome, $horarios);
    }
my JS:控制台日志显示了正确的数字,但什么也没发生

$('#exportar').on('click', function(){
      var cod = $("#cod").val();
      $.get('exportar', {cod: cod},  function(data) {   
        console.log(cod);     
      });
  }); 
我的看法是:

(编辑)嗨!对不起,我现在只能看到。我的表格会怎样?我喜欢这样:

  {{Form::open(array("exportar","id"=>"ajaxForm"))}}
  {{ Form::submit('Exportar', array('id' => 'exportar', 'class' => 'exportar')) }}
  {{ Form::hidden('cod', $cod, array('id' => 'cod', 'class' => 'cod')) }}
  {{ Form::close() }}
$(".ajaxForm").submit(function(e) {
        e.preventDefault();

        var postData = $(this).serialize();
        var url = $(this).attr('action');

        $.ajax({
            type: "POST",
            data: postData,
            dataType: 'JSON',
            url: url,
            beforeSend: function() {
                $(".preloaderContainer").fadeIn(); // example
            }

        }).done(function(response) {
                console.log(response);
        }).fail(function() {
                console.log(response);

   });
我想把隐藏字段中的COD传递给生成文件的人,我的功能正常,我只需要传递这个数字,不知道发生了什么


谢谢

你好,拉拉维勒同志

首先请使用POST,不要获取!这意味着您必须将路线更改为route::post

在使用AJAX之后,不要像这样:

  {{Form::open(array("exportar","id"=>"ajaxForm"))}}
  {{ Form::submit('Exportar', array('id' => 'exportar', 'class' => 'exportar')) }}
  {{ Form::hidden('cod', $cod, array('id' => 'cod', 'class' => 'cod')) }}
  {{ Form::close() }}
$(".ajaxForm").submit(function(e) {
        e.preventDefault();

        var postData = $(this).serialize();
        var url = $(this).attr('action');

        $.ajax({
            type: "POST",
            data: postData,
            dataType: 'JSON',
            url: url,
            beforeSend: function() {
                $(".preloaderContainer").fadeIn(); // example
            }

        }).done(function(response) {
                console.log(response);
        }).fail(function() {
                console.log(response);

   });
这里的诀窍如下:

提交表单时,我们需要捕获事件“e”,并通过
e.preventDefault()阻止页面转到该控制器

之后,serialize方法获取所有iputs字段信息及其名称,并创建发布到特定url的查询字符串(方法) “url”变量从表单属性“action”获取信息

在您的方法中,您应该这样做以检查是否一切正常:

$inputs = Input::except('_token');
 return Response::json($inputs);
问候我,如果你需要任何其他帮助和解释,请告诉我

成功了

我放弃了使用ajax,只是尝试了路由

Route::get('relatorios/exportar/{cod}', array('as' => 'relatorios.exportar', 'uses' => 'ReportsController@exportar'));
我的控制器

 public function exportar($cod)
    {   
        set_time_limit(0);
        $datainicio = DB::table('tb_periodo')->where('cod', $cod)->pluck('periodo_inicio'); 
        $datafinal  = DB::table('tb_periodo')->where('cod', $cod)->pluck('periodo_fim');
        $mes  = DB::table('tb_periodo')->where('cod', $cod)->pluck('mes_referencia'); 

        $horarioQuery = $this->horario->with(array('funcionario', 'item_contabil'))
                            ->whereBetween('data', array($datainicio, $datafinal))
                            ->whereNull('deleted_at')
                            ->orderBy('cod_funcionario')
                            ->orderBy('data', 'ASC')
                            ->get();

        $horarios = reset($horarioQuery);

        $nome = 'Marcações'.$mes.'-'.Carbon::now()->year;

        $this->horario->allToExcel($nome, $horarios);
    }
视图:

这对我来说已经解决了,因为不要加载其他页面并下载正确的文件。
谢谢你的帮助

我在上面编辑了我的表单,这是正确的,因为我回到了最后一页,但什么也没发生。我在maatwebsite插件中发现了这一点:据我所知,在执行ajax请求时,不可能设置下载头。我想这是我的问题我明白了,但我找到了另一种方法,谢谢分享你的知识!我很高兴我帮了忙!!:)