Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Laravel Ajax Input::all()通过FormData发送时返回空_Javascript_Php_Jquery_Ajax_Laravel 4 - Fatal编程技术网

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

Javascript Laravel Ajax Input::all()通过FormData发送时返回空,javascript,php,jquery,ajax,laravel-4,Javascript,Php,Jquery,Ajax,Laravel 4,我正在用Laravel 4构建一个应用程序,在某种程度上,我想通过modalBootstrap添加一些模型,所以我需要ajax来发送我的请求,我在controller中设置了我的路由和操作,然后我用blade构建了表单标记,我编写了ajax代码,请求很顺利,我通过Input facade检索了输入,这里的问题是表单有一个文件输入,当使用$'formRub'序列化表单数据时,它无法处理文件输入,因此我必须使用FromData对象,并在ajax请求中将processData和contentType设

我正在用Laravel 4构建一个应用程序,在某种程度上,我想通过modalBootstrap添加一些模型,所以我需要ajax来发送我的请求,我在controller中设置了我的路由和操作,然后我用blade构建了表单标记,我编写了ajax代码,请求很顺利,我通过Input facade检索了输入,这里的问题是表单有一个文件输入,当使用$'formRub'序列化表单数据时,它无法处理文件输入,因此我必须使用FromData对象,并在ajax请求中将processData和contentType设置为false,请求已发送,但当我访问InputFacade时,我得到了空数组

路线:

路由::post'/add',['as'=>'rubrique.add.post','使用'=>'RubriquesController@ajaxaddpost'];

控制器:

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]);
}
标记:

         {{ 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()}}

您的JavaScript应该如下所示:

$('#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
    });
});
file_put_contents("test.txt", var_export(Input::all(), true));
您应该使用$form.serialize,并且必须删除contentType:false

现在,如果您在控制器中输入如下内容:

$('#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
    });
});
file_put_contents("test.txt", var_export(Input::all(), true));
它将创建一个包含数据的文件,但我不知道它是否适用于文件输入

编辑

我没有注意到问题中的seralize和文件输入,所以现在,您应该在表单中添加name属性:

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

$('#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
    });
});

您的JavaScript应该如下所示:

$('#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
    });
});
file_put_contents("test.txt", var_export(Input::all(), true));
您应该使用$form.serialize,并且必须删除contentType:false

现在,如果您在控制器中输入如下内容:

$('#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
    });
});
file_put_contents("test.txt", var_export(Input::all(), true));
它将创建一个包含数据的文件,但我不知道它是否适用于文件输入

编辑

我没有注意到问题中的seralize和文件输入,所以现在,您应该在表单中添加name属性:

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

$('#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
    });
});

这是因为发送带有数据的数组与jquery ajax相同,输入::all显示[数据]=''标记=d76as78d6as87d6a&data1=value1等。。。如果打印值Input::all将向您显示一个完整的数组,则不作为sincronized请求,laravel将以不同的方式处理jQuery发送的POST请求,这是因为发送带有数据的数组与jQuery ajax相同,Input::all将显示[data]=“U标记=d76as78d6as87d6a&data1=value1等。。。如果您打印值Input::all将显示一个完整的数组,则不会作为一个sincronized请求,laravel将以不同的方式处理jQuery发送的POST请求。键位于ajax请求中。在控制器中,你可以做任何你想做的事情

var form = document.forms.namedItem("yourformname"); // high importance!, here you need change "yourformname" with the name of your form
var formdata = new FormData(form); // high importance!

$.ajax({
    async: true,
    type: "POST",
    dataType: "json", // or html if you want...
    contentType: false, // high importance!
    url: '{{ action('yourController@postMethod') }}', // you need change it.
    data: formdata, // high importance!
    processData: false, // high importance!
    success: function (data) {

        //do thing with data....

    },
    timeout: 10000
});

关键在于ajax请求。在控制器中,你可以做任何你想做的事情

var form = document.forms.namedItem("yourformname"); // high importance!, here you need change "yourformname" with the name of your form
var formdata = new FormData(form); // high importance!

$.ajax({
    async: true,
    type: "POST",
    dataType: "json", // or html if you want...
    contentType: false, // high importance!
    url: '{{ action('yourController@postMethod') }}', // you need change it.
    data: formdata, // high importance!
    processData: false, // high importance!
    success: function (data) {

        //do thing with data....

    },
    timeout: 10000
});

试试这个插件我不想要上传的插件,我只需要这个表单中的上传,你能帮我解释为什么这样不行吗?试试这个插件我不想要上传的插件,我只需要这个表单中的上传,你能帮我解释为什么这样不行吗?我想你还没有读过我的问题描述,我已经这么做了,但是$form.serialize不能处理文件!!非常感谢你!!你救了我的命!!,但是如果你知道为什么普通的选择器不起作用?什么是document.forms???@ilyas我不知道你为什么要使用这样的语法,但当你看到它工作时,我在谷歌的一些文档中找到了它。我想你还没有读过我的问题描述,我已经读过了,但是$form.serialize不适用于文件!!非常感谢你!!你救了我的命!!,但是如果你知道为什么普通的选择器不起作用?什么是document.forms???@Ilyass我不知道为什么你应该使用这样的语法,但正如你看到的那样,我在谷歌的一些文档中找到了它