如何将 jquery 数组传递给 laravel 控制器
Posted
技术标签:
【中文标题】如何将 jquery 数组传递给 laravel 控制器【英文标题】:How to pass jquery array to a laravel controller 【发布时间】:2015-01-23 12:12:48 【问题描述】:这是我的代码,所以你可以看到我在做什么
var cont = 1;
var form_data = ;
$('.preview-add-button').click(function() //Introduce los nuevos campo
form_data["isexo"] = $('.payment-form #sexo option:selected').text();
form_data["icolor"] = $('.payment-form input[name="color"]').val();
form_data["iraza"] = $('.payment-form #raza option:selected').text();
form_data["itipo"] = $('.payment-form #tipo option:selected').text();
form_data["iprecio"] = $('.payment-form input[name="precio"]').val();
form_data["ipeso"] = $('.payment-form input[name="peso"]').val();
form_data["imonto"] = parseFloat($('.payment-form input[name="precio"]').val()*$('.payment-form input[name="peso"]').val()).toFixed(2);
form_data["remove-row"] = '<span class="glyphicon glyphicon-remove"></span>';
var row = $('<tr></tr>');
$.each(form_data, function( type, value )
$('<td class="input-'+type+'"><input type="hidden" class="form-control" name="data-'+type+'" value="'+value+'"></td>').html(value).appendTo(row);
cont++;
);
$('.preview-table > tbody:last').append(row);
calc_total();
$('#sexo').val('');
$('#color').val('');
$('#raza').val('');
$('#tipo').val('');
$('#precio').val('');
$('#peso').val('');
);
console.log( form_data );
$.ajax(
type: "POST",
url: "/compras/create/store",
data: form_data
);
如何将这个数组:var form_data = 传递给我的控制器?除了 form_data["remove-row"]
例如:pic
更新:尝试使用 ajax 我不知道我的代码是否正常,
$.ajax(
type: "POST",
url: "compras/create/store",
data: form_data
);
或
$.ajax(
data: form_data
);
$data 用于返回数组的我的控制器,但是:
public function store()
$compra = new Compra;
$compra->fecha = Input::get('fecha');
$compra->num_factura = Input::get('num_factura');
$compra->id_proveedor = Input::get('proveedor');
$compra->nombre_vendedor = Input::get('nombre_vendedor');
$compra->total = Input::get('total');
$compra->descuento = Input::get('desc');
$compra->itbms = Input::get('itbms');
$compra->total_bruto = Input::get('total_bruto');
$id_compra = $compra->id;
$data = Input::except('remove-row');
if($compra->save())
Session::flash('message','Guardado Correctamente');
Session::flash('class','success');
else
Session::flash('message','Ha ocurrido un error');
Session::flash('class','danger');
return $data;
返回: "_token":"tLPlnBix0vQxkjZkHaF9cdIFPvgq7O1U7pTXye8v","fecha":"2014-11-25","num_factura":"2131AJ","proveedor":"6","nombre_vendedor":"DelPotro","id_proveedor":"","ruc":"","telef":"","sexo":"","color":"","raza":"","tipo":"","precio":"","peso":"","total_bruto":"387.00","total":"387.00","desc":"","itbms":""
没有 form_data 数组
【问题讨论】:
在你的HTML头部导入JS怎么样? 您是否考虑过进行 ajax 调用? 使用 $.post 或 $.ajax 然后将 aavascript 数组传递给 php 文件 @bodruk 你是说这个吗: HTML::script('js/jquery.js') ?? @PeterKA 是的,我正在阅读它,因为我从未使用过它。 【参考方案1】:我在这里给出代码来做类似的事情,在我的例子中,我将用户兴趣(游泳、唱歌、音乐等)保存到一个名为 Interests(id,interest_name) 的数据库表中。
首先让我们看一下javascript:
public function saveInterests()
//I declare the array here
var allVals = [];
//I get my values from checkboxes checked in a div with id interests
$('#interests :checked').each(function()
allVals.push($(this).val());
);
//Now I am making an post ajax call
$.post("http://b2.com/saveInterests", interests: allVals,function(data)
//this is ajax callback function
if(data=='Saved')
alert('Saved With Success');
else
alert('Sorry couldnt save data in Database');
);
//处理这个Ajax请求的路由 Route::post('saveInterests',array('as'=>'interests.Profile','uses'=>'ProfileController@saveInterests'));
//ProfileController中用于处理路由的Laravel代码
public function saveInterests()
$iarray=Input::get('interests'); //getting my array from ajax call to Laravel
foreach($iarray as $userInterest)
$inter = new Interest(); //creating a new row in Interest table using model
$inter->interest_name=$userInterest;
$inter->save();
return "Success";
【讨论】:
【参考方案2】:使用 jQuery,您可以对指定的路由进行 ajax 调用,该路由又会调用指定的控制器方法。您可以使用:
jQuery.ajax( [settings ] )
//data: form_data,
或者:
jQuery.post( url [, data ] [, success ] [, dataType ] )
//with form_data as the second parameter
在您的控制器方法中,您可以使用以下方法获取数据:
$mydata = Input::except('remove-row');
注意
如果您单击的元素是 submit
按钮,并且 ajax 调用位于单击处理程序中的某个位置,请考虑进行以下更改。
变化:
$('.preview-add-button').click(function() //Introduce los nuevos campo
var form_data = ;
收件人:
$('.preview-add-button').closest('form').on('submit', function( e )
e.preventDefault();//this line prevents the form from submitting
var form_data = ;
更新:
除上述改动外,请移动ajax调用,使其如下图所示:
$('#peso').val('');
console.log( form_data );
$.ajax(
type: "POST",
url: "/compras/create/store",
data: form_data,
success: function( result )
console.log( result ); //please post output of this
);
);
【讨论】:
我做错了什么:$.ajax( type: "POST", url: "compras/create/store", data: form_data );或 $.ajax( data: form_data );但是我的控制器没有得到数组 第一个看起来不错。您在 jQuery 代码中的哪个位置放置了这个 ajax 调用?您可以在进行 ajax 调用之前放置一个console.log( form_data );
行吗.....然后将结果与返回的结果进行比较。
带 chrome 控制台:icolor:“brown”imonto:“465.45”ipeso:“321”iprecio:“1.45”iraza:“jersy”isexo:“Hembra”itipo:“leche”remove-row : "",调用放在 $('.preview-add-button').click(function() );我将 form_data 值重命名为 issomething 以进行区分,例如:form_data["icolor"]
如果页面刷新,请进行我的回答中建议的更改并让我们知道结果。
我做了建议的更改,但是我无法将行和数据添加到 form_data :(以上是关于如何将 jquery 数组传递给 laravel 控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何将视图中的数组传递给 ajax 并在 Laravel 5 的控制器中访问?