【发布时间】:2012-02-18 16:37:23
【问题描述】:
我正在尝试在我的 grails 应用程序中为 webflow 使用 submitToRemote 按钮。我正在使用 jquery 来处理 ajax。我创建了一个自定义标记库,它将 submitToRemote 按钮更改为在 Web 流中并附加 eventId ......
def remoteWebFlowSubmit = {attrs, body ->
def elementName = attrs['name'].replaceAll(/ /, "_")
def button = submitToRemote(attrs, body) //<-- standard grails submitToRemote button
button = button.replaceFirst(/data\:jQuery/, "data:\'_eventId_${elementName}=1&\'+jQuery")
out << button
}
这适用于 Fire Fox 和 Chrome,但不会在 IE 9、8 或 7 中提交任何表单数据。生成的按钮在 IE 中如下所示:
<input name="next" onclick="showSpinner('webFlowContainer');;jQuery.ajax({type:'POST',data:'_eventId_next=1&'+jQuery(this).parents('form:first').serialize(), url:'/MySite/MyController/run?execution=e3s1',success:function(data,textStatus){jQuery('#webFlowContainer').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown){jQuery('#webFlowContainer').html(XMLHttpRequest.responseText);}});return false" type="button" value="Next"/>
我做错了什么?我在 JS 控制台中没有看到任何错误。
更新:
1.) 我还添加了一个 grails 过滤器来防止 ajax 响应被缓存。这是过滤器:
class AjaxFilters {
def filters = {
all(controller:'*', action:'*') {
before = {
if (request.getHeader('X-Requested-With')?.equals('XMLHttpRequest')) {
response.setHeader('Expires', '-1')
}
}
}
}
}
【问题讨论】:
-
你有 JS 错误吗?如果您将日志记录放在
ajax调用的error块中,而不是将其留空怎么办? -
我更新了我的问题并添加了错误块。没有 js 错误。
标签: jquery grails spring-webflow