我知道这是一个经常性/经典主题,但到目前为止我找不到任何帮助我的东西。 我试图从我的控制器渲染一个地图。这是由Ajax请求产生的,并且应该由Javascript函数“onSuccess”“吃掉”。
以下是 Javascript 和 .gsp视图:
<g:javascript>
function updateVideoLoad(e) {
var map = eval("("+e.responseText+")") // evaluate the JSON
$('#resultsChecker').html(map.urlAccepted + ' - ' + map.provider + ' - ' + map.videoId + ' - ' + map.videoTag)
}
</g:javascript>
<g:formRemote name="myForm" update="" url="[controller: 'project', action:'addVideo']" onSuccess="updateVideoLoad(e)">
...
</g:formRemote>
这是我的控制器:
import grails.converters.JSON
class ProjectController {
def addVideo() {
...
def videoMap = [urlAccepted: videoList[0], provider: videoList[1], videoId: videoList[2], videoTag: videoList[3]]
render videoMap as JSON
}
它完全按照Grails documentation中提供的示例查看。 但它不起作用。在浏览器控制台上,我得到:
Uncaught ReferenceError: e is not defined
来自我的g:remoteForm
。
任何建议都是最受欢迎的。 谢谢你的帮助。
答案 0 :(得分:1)
我在这里猜测,但它在文档中看起来像是一个错误。我希望这部分:
onSuccess="updateVideoLoad(e)"
^^^
应该是:
onSuccess="updateVideoLoad(data,textStatus)"
^^^^^^^^^^^^^^^^^
查看生成的代码(在Grails 2.0下),这些是返回的变量:
<form onsubmit="jQuery.ajax({type:'POST',data:jQuery(this).serialize(), url:'/project/addVideo',success:function(data,textStatus){updateVideoLoad(e);},error:function(XMLHttpRequest,textStatus,errorThrown){}});return false"
method="post" action="/project/addVideo" id="myForm">
查看生成代码中的success
属性。
答案 1 :(得分:1)
这似乎有效:
<g:formRemote name="myForm" update="" url="[controller: 'project', action:'addVideo']" onComplete="updateVideoLoad(XMLHttpRequest)">
是否有位置可以获取有关这些javascript事件的文档(onComplete
,onSuccess
,...)?
答案 2 :(得分:0)
这似乎是一个文档错误。如果使用JQuery(Grails 2.0的默认值)变量应该是'data'而不是'e'并且它将包含您从控制器返回的JSON对象,并且不需要像在文档中那样评估或解析它
答案 3 :(得分:0)
我遇到了同样的问题,但我正在使用Dojo。
如果你使用dojo,你应该使用变量名'response':
onComplete="updateVideoLoad(response)"
它适用于Dojo。