Javascript 如何在jqueryajax中使用formData在laravel中上传文件
我正在使用Laravel5.4和jQueryAjax上传文件和一些表单数据 我正在使用下面的代码Javascript 如何在jqueryajax中使用formData在laravel中上传文件,javascript,php,jquery,laravel,file-upload,Javascript,Php,Jquery,Laravel,File Upload,我正在使用Laravel5.4和jQueryAjax上传文件和一些表单数据 我正在使用下面的代码 function submitDocument(){ var formData = new FormData(); // Currently empty var _token = $("#_token").val().trim(); formData.append('title', $("#title").val()); formData.append("doc",$
function submitDocument(){
var formData = new FormData(); // Currently empty
var _token = $("#_token").val().trim();
formData.append('title', $("#title").val());
formData.append("doc",$("#doc")[0].files[0]);
$.ajax({
url: "documents",
method: "post",
data:{_token,formData},
}).done(function(data) {
});
return false;// Not to submit page
}
我得到了一个错误
未捕获类型错误:非法调用
我怎样才能解决这个问题?提前感谢您抽出时间
我可以通过使用
console.log(formData.get('title'));
console.log(formData.get('doc'));
尝试在代码中添加
processData:false、contentType:false
将脚本替换为以下内容:
function submitDocument(){
var formData = new FormData(); // Currently empty
var _token = $("#_token").val().trim();
formData.append('title', $("#title").val());
formData.append("doc",$("#doc")[0].files[0]);
$.ajax({
url: "documents",
method: "post",
data:{_token,formData},
cache : false,
processData: false,
contentType: false
}).done(function(data) {
});
return false;// Not to submit page
}
默认情况下,作为对象传递到数据选项的数据将被处理并转换为查询字符串,符合默认内容类型“application/x-www-form-urlencoded”。如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。请尝试这种方式
$(document).ready(function (){
$("#form").on('submit',(function(e){
e.preventDefault();
var formdata = new FormData(this);
var _token = $("#_token").val().trim();
formData.append('title', $("#title").val());
formData.append("doc",$("#doc")[0].files[0]);
$.ajax({
url: "/site/url",
type: "POST",
data:{token:_token,formData},
contentType: false,
cache: false,
processData:false,
success: function(data){
},
});
}));});
$(文档).ready(函数(){
var url=“{url('/admin/file')}}”;
变量选项={
键入:“post”,
url:url,
标题:{'X-CSRF-TOKEN':{{{CSRF_TOKEN()}}}},
数据类型:“doc”,
cache:false,
contentType:false,
processData:false,
成功:功能(数据){
警报(“正常”);
},
错误:函数(数据){
警报(“错误”);
}
};
$('#save')。在('click',function(){
$(“#表格”).ajaxSubmit(选项);
返回false;
});
});
您是否尝试过在formData对象中添加_标记值?@gbalduzzi:是的,我尝试过,没有成功。似乎是重复的:我的代码不会发送到控制器,因为使用了processData:false,
我收到了“标记不匹配错误”,请在contentType:false标头之后使用此标头:{'X-CSRF-Token':$('meta[name=“CSRF-Token”]').attr('content')},
我尝试了这个,但没有得到title
或doc
<script>
$(document).ready(function() {
var url = "{{ url('/admin/file') }}";
var options = {
type: 'post',
url: url,
headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}'},
dataType: 'doc',
cache: false,
contentType: false,
processData: false,
success: function (data) {
alert('Ok');
},
error: function (data) {
alert('Error');
}
};
$('#save').on('click', function() {
$("#form").ajaxSubmit(options);
return false;
});
});
</script>