Laravel Ajax Input::all()在通过FormData发送时返回空
Laravel Ajax Input::all() return empty when send it via FormData
im使用Laravel 4构建应用程序,在某些情况下,我想通过t modal(Bootstrap)添加一些模型,所以我需要ajax来发送我的from,我在控制器中设置了我的路由和操作,然后我用blade构建了表单标记,我编写了ajax代码,请求很好,我通过Input facade检索输入,这里的问题是表单有一个文件输入,当用$('#formRub').serialize()序列化表单数据时,它无法处理文件输入,所以我必须使用FromData对象,并在ajax请求中设置processData和contentType为false,请求已发送,但当你访问input facade时,我得到了空数组!!
路线:
Route::post('/add', ['as' => 'rubrique.add.post', 'uses' => '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()}}
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
});
});
键在您的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
});
您的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
});
});
您应该使用$form.serialize()
,并且必须删除contentType: 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
});
});
这是因为发送带有"data"的数组,与jquery ajax相同,Input::all()
显示[data]='_token=d76as78d6as87d6a&data1=value1
等……不是一个sincronized请求。如果打印值,Input::all
将显示一个完整的数组,laravel以不同的方式处理jquery 发送的POST请求
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何在d3.js中返回路径的y坐标
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- JS验证ajax返回的html中的表单数据
- 即使对于非空窗体,FormData对象也返回空.对于具有2个输入字段的表单,
- 使用JavaScript's FormData对象返回整个html
- Javascript/jQuery Append to FormData()返回'未定义'
- Laravel Ajax Input::all()在通过FormData发送时返回空
- 使用jQuery ajax发送给服务器的formData对象成功后返回空数组