当我使用g:form时,我正在使用Grails进行foto上传 一切正常,文件被解析,转换并在控制器中进入会话 并作为响应我渲染一个包含foto和一些隐藏输入的模板,因为下一步是裁剪图像并发回新的坐标..
这是“uploadForm”代码:
<g:form name="uploadForm" onSuccess="sucess()" enctype="multipart/form-data" url="[controller:ProfileEditor, action:"preview${type.capitalize()}", params:[profilId:profilId]]" >
<input type="file" name="${type}" />
<input type="submit" value="<g:message code="button.${type}.upload" />">
</g:form>
<div id="uploadPreview"></div>
<script type="text/javascript">
function success() {
$('#uploadPreview').html(data);
alert("upload complete");
}
</script>
我希望将响应插入到
中('#uploadPreview')
而不是点击提交按钮,浏览器导航到url-attr中指定的网址,其中包含带有图像的模板
问题是当我使用g:formRemote时没有发布数据,就像enctype =“multipart / form-data”被完全忽略一样,afaik通过ajax上传文件有点棘手,我们已经解决了使用jquery form.js并且它是ajaxForm,它不需要formRemote,并且可以在同一页面上传foto,但我们不能再使用它导致严重的会话问题和脚本错误随机在chrome / ium和opera中 所以我必须找到另一种方式
这是简单的form.js方式,在sucessFunction上面的代码中就是:
- var options = {
- beforeSubmit : function() {
- uploadPreview.empty();
},
- complete : function(xhr) {
- percent.empty();
- uploadPreview.html(xhr.responseText);
- }
- };
- $('#uploadForm').ajaxForm(options);
并且我想知道是否有一个简单的解决方案使用formRemote将文件作为formData发布并更新div,因为ajax-foto上传并在包装表单中进行裁剪是常见的事情?
提前致谢