Php 如何运行laravel函数并通过ajax传递字段val
嘿,我想在我的控制器中运行一个函数,使用$.get传递我想要执行查询的cod,然后创建我的excel文件 我的路线,如果我在浏览器的地址栏中输入我的文件下载,那就行了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')更改为任意数字,则该选项将起作
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请求时,不可能设置下载头。我想这是我的问题我明白了,但我找到了另一种方法,谢谢分享你的知识!我很高兴我帮了忙!!:)