在 Laravel 5.1 中通过 AJAX 将用户输入数据从视图传递到控制器

Posted

技术标签:

【中文标题】在 Laravel 5.1 中通过 AJAX 将用户输入数据从视图传递到控制器【英文标题】:Passing user input data from view to controller via AJAX in Laravel 5.1 【发布时间】:2016-05-10 21:59:05 【问题描述】:

我想使用 post 方法通过 AJAX 将下拉列表数据从视图发送到控制器作为表单变量。

我可以使用 get 方法和路由参数将下拉列表数据从视图发送到控制器。

这是我的视图代码sn-p:

function drawChart(frmyear, toyear) 


    console.log(frmyear);
    console.log(toyear);


        var jsonData = $.ajax(
        url: "get_salesthree/"+ frmyear + "/"+ toyear +"/",
        dataType: 'json',
        async: false
                    ).responseText;

        console.log(jsonData);

路线代码sn-p:

    Route::get('get_salesthree/frmyear/toyear', array('uses'=>'Analytics\DashboardController@get_salesthree'));

出于安全原因,我不想使用路由参数传递用户输入数据。此外,我有多个用户输入参数需要发送到控制器,因此上述方法也不可行。因此,在这种情况下还有其他可用的替代解决方案吗?

控制器代码sn-p:

public function get_salesthree($frmyear, $toyear)
   

     return \Response::json(Salethree::get_formatted_salesthree($frmyear, $toyear ));


下拉列表代码sn-p:

<label>From Date</label>
                    <select id="ddlfrmyear" name="frmyear" onchange="check(this);">
                    <option value="-1">Select Date </option>
                        @foreach ($date_lists as $date_list)
                    <option value=" $date_list"> $date_list</option>
                        @endforeach
                    </select>

javascript 检查功能:

function check(sel) 

   document.getElementById('ddltoyear').disabled = !sel.selectedIndex;
   var frmyear =  document.getElementById('ddlfrmyear').value;

   var toyear =  document.getElementById('ddltoyear').value;

   console.log(frmyear);    
   console.log(toyear);
    if (toyear != '-1')
    
        drawChart(frmyear, toyear);
        //drawChart();      
   

现在我发现在按照建议更改 ajax 调用后未定义检查功能。我想知道下拉列表的选择事件和AJAX路由之间的关系是什么?

【问题讨论】:

【参考方案1】:

这只是你理解的一个例子,我希望这将指导你获得你的功能。

如果你不想在 URL 中显示你的数据/参数,那么你也可以使用 Ajax Post,

$.ajax(
        type: 'POST' 
        url: "get_salesthree/",
        data: yourForm.serialize()
        dataType: 'json'

并在您的路线中,删除查询字符串的变量,并使其成为这样。

Route::post('get_salesthree/', array('uses'=>'Analytics\DashboardController@get_salesthree'));

在你的控制器中

public function get_salesthree(Request $request)   
     $frmyear = $request->input('frmyear');
     $toyear  = $request->input('toyear');

     //do your functionality as per your need


     return \Response::json(Salethree::get_formatted_salesthree($frmyear, $toyear ));


【讨论】:

我尝试了您建议的方法,并按照建议包含了 ajax 方法,但由于这个原因,我没有定义函数(实际上这是在下拉列表的 OnSelect 事件上调用的 javascript 函数)。我想知道为什么这个函数没有在选择下拉列表时被执行,因为我只是改变了 ajax。 为什么不将纯 Js 代码转换为 Jquery 标准?它将帮助您调试您的代码.. 2ndly console.log 您的代码并检查它在哪个位置中断【参考方案2】:

试试这个 jquery 答案:

js:

$('form').submit(function(e)
e.preventDefault();
 var frmyear =  $('#ddlfrmyear').val();
  var toyear =  $('#ddltoyear').val();

$.ajax(
        type: 'POST' 
        url: "get_salesthree/",
        data: frmyear:frmyear ,toyear:toyear,
        dataType: 'json',
        success:function(data)
          console.log(data);
        );
  );   

laravel:

Route::post('get_salesthree/', function(Request $request)

 $frmyear = $request->input('frmyear');
  $toyear  = $request->input('toyear');

     return \Response::json(Salethree::get_formatted_salesthree($frmyear, $toyear 

);

【讨论】:

以上是关于在 Laravel 5.1 中通过 AJAX 将用户输入数据从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 laravel 中通过 ajax 返回视图

在 Laravel 中通过 ajax 加载更雄辩的 hasMany 关系查询?

在 Laravel 5 中通过 AJAX 将数据从视图发布到控制器

如何在控制器laravel 8中通过ajax传递路由链接和图像存储链接

在 laravel 中通过 ajax 提交简单的表单,之后,将新行插入到现有表中,其中包含来自提交表单的数据

在 Laravel 5.2 中通过 RESTful 资源控制器使用 jQuery Ajax Post 方法将数据存储在数据库中