【问题标题】:How to pass jquery array to a laravel controller如何将 jquery 数组传递给 laravel 控制器
【发布时间】: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 是的,我正在阅读它,因为我从未使用过它。

标签: php jquery arrays laravel


【解决方案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 :(
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 2019-08-12
    • 2016-10-28
    • 2021-12-30
    • 2021-04-27
    • 1970-01-01
    • 2014-08-29
    • 2021-08-19
    相关资源
    最近更新 更多