我尝试制作用于 Symfony 2 上传的 ajax 脚本。Chrome 返回此错误:
未捕获的类型错误:非法调用 jquery.min.js:4
我认为这是由于
FormData
对象未正确构造(我尝试使用 .serialized()
: 编写脚本)
$(document).ready(function() {
$('#formImage').submit(function(event) {
event.preventDefault();
// appel Ajax
alert("ajax");
var input = document.getElementById("rasta_blogbundle_imagetype_file");
console.log(input);
var formdata = false;
if (window.FormData) {
formdata = new FormData();
console.log('formdata initialized ...');
}
else{
console.log('formdata not supported');
}
formdata.append('name',$('#rasta_blogbundle_imagetype_name').val());
console.log(formdata);
formdata.append('file',input);
formdata.append('_token',$('#rasta_blogbundle_imagetype__token').val());
console.log(formdata);
//alert(DATA);
if (formdata){
$.ajax({
url: $(this).attr('action'), // le nom du fichier indiqué dans le formulaire
type: $(this).attr('method'), // la méthode indiquée dans le formulaire (get ou post)
cache: false,
//data : $(this).serialize(),
data: formdata ,
success: function(data) { // je récupère la réponse du fichier PHP
$('#myModal').html(data);
console.log('ok');
}
//return false; //
});
}
});
});
jQuery 尝试将您的 FormData 对象转换为字符串,将其添加到您的 $.ajax 调用中:
processData: false,
contentType: false
当 jquery 内部未正确序列化数据时,有时会发生这种情况,要修复它,请添加此内容。
cache : false,
dataType : 'json',
processData : false,
我只需添加以下内容就解决了这个问题:
contentType: false,
processData: false,
cache: false,
表单也可以自动转换为对象后发送。
$("#form").submit( function (e) {
e.preventDefault(); //prevent sending via browser, navigating or refreshing.
let formData = new FormData(this);
let formObj = Object.fromEntries(formData);
$.ajax(uri, {
type: "post",
data: formObj
});
}