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

Php 在Laravel 5.1中通过AJAX将用户输入数据从视图传递到控制器,php,jquery,ajax,laravel,Php,Jquery,Ajax,Laravel,我想使用post方法通过AJAX将下拉列表数据作为表单变量从视图发送到控制器 我能够使用get方法和route参数将下拉列表数据从视图发送到控制器 以下是我的查看代码片段: function drawChart(frmyear, toyear) { console.log(frmyear); console.log(toyear); var jsonData = $.ajax({ url: "get_salesthree/"+ frmyea

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

我能够使用get方法和route参数将下拉列表数据从视图发送到控制器

以下是我的查看代码片段:

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);
    Route::get('get_salesthree/{frmyear}/{toyear}', array('uses'=>'Analytics\DashboardController@get_salesthree'));
public function get_salesthree($frmyear, $toyear)
{   

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

}
<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>
路由代码段:

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);
    Route::get('get_salesthree/{frmyear}/{toyear}', array('uses'=>'Analytics\DashboardController@get_salesthree'));
public function get_salesthree($frmyear, $toyear)
{   

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

}
<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>
出于安全原因,我不想使用路由参数传递用户输入数据。此外,我有多个用户输入参数,需要发送到控制器,因此上述方法是不可行的。因此,在这种情况下是否有其他替代解决方案

控制器代码段:

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);
    Route::get('get_salesthree/{frmyear}/{toyear}', array('uses'=>'Analytics\DashboardController@get_salesthree'));
public function get_salesthree($frmyear, $toyear)
{   

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

}
<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>
Dropdownlist代码段:

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);
    Route::get('get_salesthree/{frmyear}/{toyear}', array('uses'=>'Analytics\DashboardController@get_salesthree'));
public function get_salesthree($frmyear, $toyear)
{   

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

}
<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>

现在我发现,在按照建议更改ajax调用之后,并没有定义check函数。我想知道下拉列表的on select事件和AJAX路由之间有什么关系

这只是一个供您理解的示例,我希望这将引导您获得您的功能

如果您不想在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 ));

}

尝试以下jquery答案:

js:

拉雷维尔:

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

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

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

});

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