【问题标题】:Laravel 5 controller won't receive data from ajax formLaravel 5 控制器不会从 ajax 表单接收数据
【发布时间】:2016-04-15 08:09:31
【问题描述】:

好吧,伙计们,我被这个难住了。我正在使用 jQuery/Ajax 向我的 Laravel 5 控制器提交一个表单(路由工作得很好,没有问题)。控制器返回的正是我所期望的,除了表单中的数据。

这是一些代码。

表格:

    <form action="/candidateajax/add/" enctype="multipart/form-data" method="post" accept-charset="utf-8" name="candidate" id="addcand">
        <input type="hidden" id="token" name="_token" value="{{ csrf_token() }}">
        <div>
        Name
        {!! Form::text('first_name', null, array('placeholder'=>'First Name')) !!}
        {!! Form::text('last_name', null, array('placeholder'=>'Last Name')) !!}
        </div>

        <div id="candimages">
        Image
        {!! Form::file('image', null) !!}
        </div>

        <div>
        Bio<br/>
        {!! Form::textarea('bio', null, array('placeholder'=>'Bio Text')) !!}
        </div>

        <div>
        Q&A<br/>
        {!! Form::textarea('qa', null, array('placeholder'=>'Q&A Text')) !!}
        </div>

        <div>
        Additional Info<br/>
        {!! Form::textarea('html', null, array('placeholder'=>'Additional Info Text')) !!}
        </div>

        <div>
        Party
        {!! Form::select('party', $parties) !!}
        </div>

        <div>
        <!--<button type="button" id="addcandbtn">Add Candidate</button>-->
        <button type="submit" id="addcandbtn">Add Candidate</button>
        </div>
        </form>

<div>
  Party
  {!! Form::select('party', $parties) !!}
</div>

<div>
    <!--<button type="button" id="addcandbtn">Add Candidate</button>-->
    <button type="submit" id="addcandbtn">Add Candidate</button>
</div>
</form>

Javascript/jQuery:

$("#addcand").on('submit', function(e){

        var dataser = $("#addcand").serialize();
        console.log(dataser); // Proves that the serialized form has data

        e.preventDefault();

        $.ajax( {
      url: '/candidateajax/add/',
            data: dataser,
      type:'POST',
            cache:false,
            dataType: 'json',
            enctype:'multipart/form-data',
      success:function(response){
        console.log(response);
      },
            error: function(jqXHR, textStatus, errorThrown){
                console.log(jqXHR.responseText);
            }
    });
    });

Laravel 控制器:

public function createCandidateAjax(Request $request)
{
  $input = Input::all();
  return response()->json($input);
}

我尝试过返回和转储 $input 和 $request。他们都是空的。

任何帮助将不胜感激。谢谢!!

【问题讨论】:

  • 产生任何错误?以及 Laravel 的确切版本...5.0、5.1、5.2?
  • 你检查过你的路由文件了吗?检查请求是否正确路由到控制器,并检查您收到的错误消息。
  • 我想您应该从表单中删除操作,因为您的表单有一个提交类型的按钮,因此您的表单直接发布数据而不是 ajax 调用
  • 这段代码对我来说没有任何错误,它会准确地返回它应该是什么,除了是空的。我的路线运行良好。我为这个 Ajax 请求做了一个方法,它连接得很好。我也尝试从表单中删除 action 属性,但仍然得到相同的结果。
  • Laravel 的确切版本是什么?想知道,因为 &gt;= 5.2 具有应该封装此路由的 Web 中间件,因为您使用的是 csrf_token() 帮助器。

标签: jquery ajax laravel-5


【解决方案1】:

好的,谢谢大家的帮助。我发现我的 ajax 请求是作为 GET 请求而不是 POST 请求接收的,即使 Ajax 方法/类型设置为 POST 并且表单操作设置为 POST。当我从 URL 参数中删除尾随的“/”时,它作为 POST 发送就可以了,并且按预期工作。

请注意,对于 Laravel 5.1 的 ajax 请求,我无法解释为什么 Laravel 5.1 不喜欢尾随的“/”,但它不喜欢。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2014-05-16
    • 2016-10-17
    • 1970-01-01
    • 2018-12-16
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多