一般我们用的第三方库基本上都是内部封装好的,也都是这种方式,比如jquery 的 AjaxSubmt,他在上传的时候就是临时生成iframe form 用户上传,要不然他也做不到。
<form style="margin: 20px 30px 10px 45px;" class="layui-form userForm" action="user/save"
enctype="multipart/form-data"
method="post"
target="formSubmitFrame"
lay-filter="userForm">
<iframe id="formSubmitFrame" name="formSubmitFrame" src="about:blank" style="display:none;"></iframe>
<input type="file" name="file" />
</form>
<script>
//我用的layui form 其他方式都是一样的。
form.on('submit(saveUserBtn)', function (data) {
var a = setInterval(function () {
var formSubmitFrame = document.getElementById('formSubmitFrame').contentWindow;
let pre = formSubmitFrame.document.getElementsByTagName('pre');
if (pre && pre.length > 0 && !!pre[0].innerText) {
clearInterval(a);
var data = JSON.parse(pre[0].innerText);
if (data && data.success) {
layer.close(index);
page.renderTable();
return showSuccessMsg('保存成功!');
} else {
return showErrorMsg(data.msg || '保存失败!');
}
}
}, 1);
return true;
});
</script>
这里是后台返回的JSON,如果返回字符串也是如此,但是判断的内容可能就需要改下了。我没试过。