ajax formdata : 非法的调用
ajax formdata : 非法的调用
我试图为Symfony 2创建一个用于上传的ajax脚本。Chrome返回以下错误:
Uncaught TypeError: Illegal invocation jquery.min.js:4
我认为这是由于FormData
对象没有正确构造(我尝试使用.serialized()
的脚本:
$(document).ready(function() { $('#formImage').submit(function(event) { event.preventDefault(); // 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初始化完成...'); } else{ console.log('不支持formdata'); } 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'), // 表单中指定的文件名 type: $(this).attr('method'), // 表单中指定的方法(get或post) cache: false, //data : $(this).serialize(), data: formdata , success: function(data) { // 获取PHP文件的响应 $('#myModal').html(data); console.log('ok'); } //return false; // }); } }); });
在使用Ajax发送FormData时,有时会遇到"ajax formdata : Illegal invocation"的问题。这个问题的出现是由于一些原因造成的,下面将详细介绍问题的原因以及解决方法。
问题的原因是在使用Ajax发送FormData时,必须设置一些参数来确保数据能够正确地传输。缺少这些参数会导致"ajax formdata : Illegal invocation"错误的出现。
解决这个问题的方法是添加以下参数:
contentType: false,
processData: false,
cache: false,
这些参数的作用是:
- contentType: false表示不设置Content-Type头部,让浏览器自动设置合适的值。
- processData: false表示不对数据进行处理,让浏览器自动处理FormData对象。
- cache: false表示不缓存请求结果。
通过添加这些参数,可以解决"ajax formdata : Illegal invocation"的问题,确保数据能够正确地传输。
下面是一个示例代码,演示如何使用这些参数来解决问题:
var formData = new FormData(); formData.append('file', file); $.ajax({ url: 'upload.php', type: 'POST', data: formData, contentType: false, processData: false, cache: false, success: function(response) { console.log('File uploaded successfully'); }, error: function(xhr, status, error) { console.log('An error occurred while uploading the file'); } });
在这个示例中,我们创建了一个FormData对象,并将文件添加到其中。然后使用Ajax发送FormData,并设置了contentType、processData和cache参数来解决问题。
通过以上的解决方法,我们可以成功地解决"ajax formdata : Illegal invocation"的问题,确保数据能够正确地传输。希望这篇文章对你有帮助!
问题:ajax formdata : Illegal invocation 出现的原因以及解决方法
问题描述:
在使用ajax提交表单数据时,有时会出现"ajax formdata : Illegal invocation"的错误。这个错误通常是由于jquery在内部序列化数据时出现问题导致的。
解决方法:
为了解决这个问题,可以添加以下代码:
cache : false, dataType : 'json', processData : false,
这些代码会告诉jquery在处理表单数据时禁用缓存、将返回的数据类型设置为json,并且不对数据进行处理。这样可以确保在通过ajax提交表单数据时不会出现"ajax formdata : Illegal invocation"错误。
至此,我们已经了解了"ajax formdata : Illegal invocation"错误的原因以及解决方法。
问题的出现原因是jQuery尝试将FormData对象转换为一个字符串,但是转换过程中出现了非法调用的情况。解决方法是在$.ajax调用中添加以下代码:
processData: false, contentType: false
点击这里查看完整的工作示例:http://stackoverflow.com/a/10899796/957950
这个方法非常好,完全奇妙。真是令人惊讶的是,一些小的配置缺失可能会破坏你的工作。非常感谢啊兄弟。
哎呀!这浪费了我好几个小时。
这就像当你在YouTube上看2012年的视频时,人们仍然在挖掘它一样。为了找到这个问题,浪费了好几个小时。