Laravel 5 在控制器中获取 AJAX 数组 POST

Posted

技术标签:

【中文标题】Laravel 5 在控制器中获取 AJAX 数组 POST【英文标题】:Laravel 5 get AJAX array POST in Controller 【发布时间】:2015-11-05 23:05:39 【问题描述】:

我有以下表格:

<td>
  <input type="text" name='name[]' class="form-control"/>
</td>
<td>
  <input type="text" name='mail[]' class="form-control"/>
</td>
<td>
  <select name="gender[]" class="form-control">
    <option value="m">Male</option>
    <option value="f">Female</option>
  </select>
</td>
<td>
  <input type="date" name='birth[]' class="form-control"/>
</td>
<td>
  <input type="number" name='dni[]' class="form-control"/>
</td>
<td>
  <input type="number" name='phone[]' class="form-control"/>
</td>

当我尝试提交表单时我的 ajax 调用

$('#form-reserve-list').on('submit', function(e) 
    e.preventDefault();
    var names =    $("input[name='name[]']").serialize();
    var mails =    $("input[name='mail[]']").serialize();
    var genders =  $("select[name='gender[]']").serialize();
    var births =   $("input[name='birth[]']").serialize();
    var dnis =     $("input[name='dni[]']").serialize();
    var phones =   $("input[name='phone[]']").serialize();
    var _token =   $('input[name=_token]').val();
    var est_id =   $('input[name=est_id]').val();
    var event_id = $('input[name=event_id]').val();

    var url = 'http://localhost:82/boulevard/public/event/reserve/list';

    $.ajax(
        type: 'POST',
        url: url,
        data: names:names, mails:mails, genders:genders, births:births, dnis:dnis, phones:phones, _token: _token, est_id:est_id, event_id:event_id,
        cache: false,
        success: function(data)
            alert(data);
        
    );

我想在我的控制器中接收它并执行一个 foreach 或 for 循环并将其保存到我的数据库中,但问题是当我尝试时:

    $names = Input::get('names'); //from ajax names
    foreach($names as $name)
        $name[]; 
        //also tried $name[$key] after i added $key =>
    

我做错了吗?谢谢你的帮助。

编辑: 当我在 ajax 中执行 alert($names) 时,它显示为 name%5B%D=carlos&name%5B%D=kevin 这是它假设的方式吗?我也做了 dd($names);并且还显示 name%5B%D=carlos&name%5B%D=kevin 但是当我使用上面提到的 foreach 循环时,chrome 控制台显示内部错误 500,我想使用 foreach 吗?

编辑2: 当我做 dd(Input::all()) name%5B%5D=carlos&name%5B%5D=mendieta&name%5B%5D=cordero 我如何循环这些?

【问题讨论】:

你的问题是什么(但问题是当我尝试时:)? 在您的控制器中尝试dd(Input::all()) 并向我们展示它打印的内容。 快速提问,有没有办法在使用 ajax 时查看 dd() 数据?我通常在 success: 部分中使用 alert(data),这是我的控制器中的 dd(Input::all()) 但在带有一堆 span 的警报框中打印出来 您可以简单地使用console.log(data) 而不是警报,您可以在控制台中进行检查 我认为如果你想在你的控制器中把你的数据当作一个数组,你不应该序列化它。 【参考方案1】:
//No need to serialize each field.
//You could do it like this:

$('#form-reserve-list').on('submit', function(e) 

    e.preventDefault();

    var formData = $(this).serialize();
    var url = 'http://localhost:82/boulevard/public/event/reserve/list';

    $.ajax(
        type: "POST",
        url: url,
        data: formData,
        dataType: "json",
        success: function(data) 

        ,
        error: function()
            alert('opps error occured');
        
    );

);

【讨论】:

以上是关于Laravel 5 在控制器中获取 AJAX 数组 POST的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 laravel 5.3 中使用 ajax

如何从控制器获取记录到 Ajax laravel 5.2

通过 Ajax 调用将数组发送到控制器,然后控制器在 Laravel 中返​​回具有该数组的另一个视图

Laravel - 将 VerifyCsrfToken 添加到控制器获取 ajax 请求

通过 Ajax 传递对象数组并在控制器(Laravel)中作为输入