2014-09-02 54 views
0

嘿我想在我的控制器中使用$ .get傳遞我想要執行查詢的鱈魚,然後創建我的excel文件如何運行laravel函數並通過ajax傳遞字段val

我的路線,這是工作,如果我輸入我的瀏覽器我的文件下載adreess酒吧。

Route::get('relatorios/exportar', array('as' => 'relatorios.exportar', 'uses' => '[email protected]')); 

我的控制器:注意如果我更改輸入的作品::得到(「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); 
    } 

我的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() }} 

我想在隱藏字段通過COD的生成文件,我funcition作品我只需要通過這個號碼,不知道發生了什麼。

謝謝!

回答

1

你好,那裏的Laraveller!

首先請使用POST,而不是GET!這意味着你有你的路線改變路線::帖子...

在使用AJAX後,沒有得到這樣的:

$(".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();

阻止該網頁去到控制器之後,該序列化方法得到所有iputs字段的信息,他們的名字,並創建發佈到查詢字符串某某你l(方法) 和'url'變量從窗體屬性'action'獲取信息!

在你的方法,你應該這樣做檢查,如果一切正常:

$inputs = Input::except('_token'); 
return Response::json($inputs); 

的問候,並告訴我,如果你需要任何其他的幫助和解釋!

+0

我心中已經編輯我上面的形式,它的這種權利因爲我是又回到了最後一頁,並沒有任何反應 – 2014-09-03 12:06:43

+0

我發現這個在maatwebsite插件: 據我所知,這是不可能的設置下載標題當做一個Ajax請求。 我認爲那是我的問題 – 2014-09-03 13:02:43

+0

我明白了,但我找到了另一種方式去做,thx非常分享你的知識! – 2014-09-03 14:00:35

0

奏效

我使用AJAX放棄了,只是路線

Route::get('relatorios/exportar/{cod}', array('as' => 'relatorios.exportar', 'uses' => '[email protected]')); 

我控制器

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

視圖嘗試:

{{ link_to_route('relatorios.exportar', 'Exportar para excel', array($cod), array('class' => 'btn btn-success')) }} 

多數民衆贊成解決了我,因爲e不加載另一個頁面並下載正確的文件。 thx的幫助!

+0

我很高興我的幫助! :) – Cowwando 2014-09-03 14:02:16