如何将 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 控制器的主要内容,如果未能解决你的问题,请参考以下文章

将 laravel 变量传递给 jquery 数组

如何使用 vform 将对象数组传递给 laravel

如何使用 laravel 将多维数组传递给 API

如何将视图中的数组传递给 ajax 并在 Laravel 5 的控制器中访问?

将数组从jquery传递给python函数时如何设置url?

jQuery DatePicker:如何将年份数组传递给 yearRange 下拉列表