[英]<g:remoteFunction> in grails
我有这个jQuery代码:
$(".inputFiles").on("change", function(e) {
var uploadedFiles = e.originalEvent.target.files;
var fileSize = 100;
var fileType = ["image/jpeg", "image/pjpeg"];
alert("length" + uploadedFiles.length)
for (var i = 0,len = uploadedFiles.length; i < len; i++) {
var n = uploadedFiles[i].name;
var s = uploadedFiles[i].size;
var t = uploadedFiles[i].type;
}
<g:remoteFunction action="testAjax" params="[files:uploadedFiles]" />
});
});
这是控制器中的动作:
def testAjax() {
println ("ajax data "+params)
}
我总是将params.files
null,尽管alert("length" + uploadedFiles.length)
params.files
alert("length" + uploadedFiles.length)
显示的是已上传文件的数量,并且我也想更新<p id="msgs"/>
,以防成功或失败。
我也厌倦了下面的<g:remoteFunction action="testAjax" params="[files:uploadedFiles]" />
,但是它没有达到testAjax
的动作,我该如何解决
$.ajax({
url:'/myApp/photos/testAjax',
type:'POST' ,
dataType: 'JSON',
data: {files: uploadedFiles},
success: function(data) {
alert ("all files uploaded" + data);
},
error: function(data,textStatus) {alert("something went wrong " + textStatus);},
complete : function (){
alert("all done fine");
}
});
在您的示例中,数据输出将类似于:
data: {'files':'uploadedFiles'}
因为:
if(attrs?.params instanceof Map) {
hasParams = true
out << attrs.remove('params').collect { k, v ->
"\'" +
"${k}".encodeAsJavaScript() +
"\': \'" +
"${v}".encodeAsJavaScript() +
"\'"
}.join(",")
}
这是来自remoteFunction taglib的代码的一部分。 最好的方法是编写自己的Ajax代码:如果发送文件,它将被发布,因此:
$.post("${createLink(action: 'testAjax', absolute:true)}", {files:uploadedFiles})
我认为它更容易,更干净。 希望对您有所帮助。
我想您正在使用JQuery作为javascript库。 那你可以试试看
<g:remoteFunction action="testAjax" params="'files':uploadedFiles" />
如果您使用的是Dojo,则可以尝试以下操作:
<g:remoteFunction action="testAjax" params="'files'=uploadedFiles" />
潜在的技巧是阅读浏览器开发人员工具中的源代码,以了解Grails对javascript的翻译是对还是错; 然后根据翻译后的javascript调整代码。
该uploadedFiles
在你的代码转换为null
,因为Grails的对待params
在g:remoteFuntion
不带引号的常规地图。 所以uploadedFiles
在你的代码被视为常规变量,而不是在这种情况下,一个JavaScript变量。
另一种选择是直接使用jquery而不是g:remoteFunction
。 我个人尝试避免使用此标记,因为这样,JavaScript就会进入gsp而不是js文件。 维护不太好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.