dqknycyt92288 2014-10-02 10:01
浏览 92
已采纳

Laravel Ajax Input :: all()在通过FormData发送时返回空

im building an application with Laravel 4, in some point i want to add some model throught modal(Bootstrap) so i needed ajax to send my from, i have setup my route and action in controller, and then i have built the form markup with blade, i have wrote the ajax code, the request goes fine and i retrieve the inputs through Input facade, the problem here is that form has a file input, and when serialising form data with $('#formRub ').serialize(), it can't handle the file input, so i have to use FromData object and set the processData and contentType to false in the ajax request, the request sent, but i when u access to Input facade i got empty array !!

Route :

Route::post('/add', ['as' => 'rubrique.add.post', 'uses' => 'RubriquesController@ajaxaddpost']);

Controller :

class RubriquesController extends \BaseController {


public function ajaxaddpost(){
  return  dd(Input::all());
    $v = Validator::make(Input::all(), Rubrique::$rules);
    if($v->fails()){
        return Response::json([
            'fail' => true,
            'errors' => $v->errors()->toArray()
        ]);
    }
    if(Input::hasFile('image'))
        return Response::json(['success' => Input::file('image')]);

    return Response::json(['fail' => 400]);
}

Markup :

         {{ Form::open(['route' => 'rubrique.add.post', 'method' => 'post', 'files' => true, 'class' => 'form-horizontal', 'id' => 'rubForm']) }}
                {{Form::label('name', 'Nom de la boutique :', ['class' => 'col-md-4 control-label'])}}
                    {{Form::text('name', null, ['class' => 'form-control', 'placeholder' => 'Entrer votre nom de boutique..'])}}

                {{Form::label('desc', 'Description :', ['class' => 'col-md-4 control-label'])}}
                    {{Form::textarea('desc', null, ['class' => 'form-control', 'placeholder' => 'Enter votre e-mail..', 'rows' => '3'])}}



                {{Form::label('image', 'Image :', ['class' => 'col-md-4 control-label'])}}
                    {{Form::file('image', ['class' => 'form-control', 'placeholder' => 'Enter votre e-mail..'])}}

                {{Form::label('rubrique_id', 'Rubrique Parent :', ['class' => 'col-md-4 control-label'])}}
                    {{ Form::rubriques(0) }}

            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                {{Form::submit('Ajouter', ['class' => 'btn btn-primary', 'id' => 'sendRubrique']) }}

            </div>
        </div>
        {{Form::close()}}

JS:

        $('#rubForm').submit(function(e){
            e.preventDefault();
            var $form = $( this ),
                dataFrom = new FormData($form),
                url = $form.attr( "action"),
                method = $form.attr( "method" );

            $.ajax({
                url: url,
                data: dataFrom,
                type: method,
                contentType: false,
                processData: false
            });
        });
  • 写回答

3条回答 默认 最新

  • du521521521 2014-10-02 10:25
    关注

    Your JavaScript should look like this:

    $('#rubForm').submit(function(e){
        e.preventDefault();
        var $form = $( this ),
            dataFrom = $form.serialize(),
            url = $form.attr( "action"),
            method = $form.attr( "method" );
    
        $.ajax({
            url: url,
            data: dataFrom,
            type: method,
            processData: false
        });
    });
    

    You should use $form.serialize() and you have to remove contentType: false,

    Now if you put into your controller for example something like this:

    file_put_contents("test.txt", var_export(Input::all(), true));
    

    it will create file with data in it however I don't know if it will work for file input

    EDIT

    I didn't notice seralize() and file input in the question, so now, you should add name attribute to your form:

     {{ Form::open(['route' => 'rubrique.add.post', 'method' => 'post', 'files' => true, 'class' => 'form-horizontal', 'id' => 'rubForm', 'name' =>'myform']) }}
    

    and use the following code:

    $('#rubForm').submit(function(e){
        e.preventDefault();
        var $form = $( this ),
    
            dataFrom = new FormData(document.forms.namedItem("myform"));
            url = $form.attr( "action"),
            method = $form.attr( "method" );
    
        $.ajax({
            url: url,
            data: dataFrom,
            type: method,
            processData: false
        });
    });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 C#字典调用时报错,有关文件加载
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 关于PHP中POST获取数据的问题
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Python实现hog特征图可视化
  • ¥30 德飞莱51单片机实现C4炸弹
  • ¥50 CrossLink-LIF-MD6000 型 FPGA 的 CMOS 转 MIPI D-PHY IP 核功能使用异常