投放本站广告请联系:
extjscn#126.com
ExtJS 6.7不能跨域上传文件的bug
因为要使用表单实现跨域上传文件,但是发现在6.7居然不行,需要自己手动去创建FormData对象来提交,这比较奇怪。经过分析源代码,终于找到了这个bug,主要代码如下:
... if (Ext.feature.has.XHR2 && request.xhr2) { delete request.form; var formData = request.data = new FormData(form); if (request.params) { Ext.iterate(request.params, function(name, value) { if (Ext.isArray(value)) { Ext.each(value, function(v) { formData.append(name, v); }); } else { formData.append(name, value); } }); delete request.params; } } return Ext.Ajax.request(request);
以上代码是Ext.form.Panel的beforeAjaxSubmit代码片段,主要错误是在创建FormData的时候把值赋值给了data属性,而不是rawData属性,这导致了在Ext.Ajax的setOptions方法中把表单值都忽略了,从而什么也没提交。
通过重写Ext.form.Panel的beforeAjaxSubmit方法,就可使用以下代码轻松的跨域上传文件了:
view.submit({ xhr2:true, headers:{ "Content-Type": null }, method: 'POST', submitEmptyText: false, url: URI.get(CFG.organizationUnit.id === 1 ? 'shareProduct': 'product', 'import'), success: me.onSubmitSuccess, failure: me.onSubmitFailure, scope: me });
代码中,xhr2是必须的,从刚才的代码也可以看到,只有当该值为true的时候,才会使用FormData对象来提交数据,而这是使用Ajax来上传文件的常用方式。另外一个要注意的地方就是要将Content-Type设置为null,以便自动生成正确的Content-Type,不然提交也不会成功。
作者:上将军
原文:https://blog.csdn.net/tianxiaode/article/details/89201660
- 要发表评论,请先登录