2012-04-13 65 views
0

我想在grails中上传一个文件,然后处理从上传返回的json响应,但我没有太大的成功。我的看法是这样的:Grails文件上传JSON响应

<script type="text/javascript"> 
    function addData(e) { 
    alert('adding data'); 
    } 
</script> 

<g:form name="upload-form" url="[controller: 'dataset', action:'handleUpload']" 
enctype="multipart/form-data" target="hidden-upload-frame"> 
    File: <input type="file" name="myFile" /> 
    <button type="submit">Upload</button> 
</g:form> 
<iframe id="hidden-upload-frame" name="hidden-upload-frame" style="display: none" onload="addData"></iframe> 

而且在我的控制器我有

def handleUpload() { 
    def file = request.getFile('myFile') 
    def result 
    // do some fileprocessing to create the result 
    render results as JSON 

}

但是,当我提交表单,浏览器只是提示我下载了JSON响应。我也尝试过使用formRemote,但是request.getFile似乎对formRemote不是有效的。

我需要做些什么才能让addData方法被json响应调用?

回答

-1

如果你想在你的handleUpload动作返回JSON你的回报(最后一行)必须是:

render result as JSON 

还需要以下导入:

import grails.converters.JSON 
+0

Ernesto,我改变了它,它确实渲染json到iframe,但我似乎仍然无法回调addData JavaScript方法工作 – 2012-04-13 21:25:15

+0

也在Firefox上它仍然尝试下载json文件,而不是将其渲染到框架(尽管呈现在镶边上的框架) – 2012-04-13 21:28:06

0

当写一个iframe,对于某些浏览器来说,它似乎需要写成文本或html,而不是json。