【发布时间】:2016-08-21 10:34:14
【问题描述】:
我尝试在我的 laravel 项目上创建一个使用 ajax 在服务器上上传图像的表单,但请求总是失败,我尝试这样做代码有什么问题吗?
html:
<form id="changeImage" enctype="multipart/form-data">
<input type="hidden" name="_token" id="_token" value="{{csrf_token() }}">
<center>
<div class="form-group">
<center><input type="file" name="image" accept="image/*"></center>
<p class="help-block">Format: png, jpg et gif.</p>
</div>
</center>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
阿贾克斯:
$('input[name="image"]').change(function(event) {
files = event.target.files;
});
$('#changeImage').submit(function(event) {
event.preventDefault();
var _token= $('input[name="_token"]').val();
var data = new FormData();
data.append('_token',_token);
$.each(files, function(k, v) {
data.append('image',v);
});
$.ajax({
url: '/profile/image',
type: 'POST',
data:data,
processData: false,
contentType: "multipart/form-data",
success: function(data){
console.log('done'+data);
},
async: false,
error: function(data){
console.log('No');
var errors = data.responseJSON;
errorsHtml = '<div class="alert alert-danger"><ul>';
$.each( errors , function( key, value ) {
errorsHtml += '<li>' + value[key] + '</li>';
});
errorsHtml += '</ul></div>';
$( '#form-errors' ).html( errorsHtml );
}
});
});
服务器端 - PHP (laravel):
路线:
Route::post('profile/image','ProfileFormsController@postImage');
控制器
public function postImage(Request $request){
if($request->ajax()){
$imagedestination = 'images\profile';
$file = $request->file('image');
$image_name = time()."-".$file->getClientOriginalName();
$file->move($imagedestination, $image_name);
}
}
【问题讨论】:
-
@Sunil 我尝试这样做,但我在这一行中得到一个 jQuery 错误
data:new FormData($("#upload_form")[0]),错误是:TypeError: 'append' called on an object that does not implement interface FormData.
标签: php jquery ajax laravel laravel-5