我正在尝试调用一个返回java脚本的服务,该脚本反过来描述了Google验证码服务。在常规页面刷新中,让我们在页脚中说,脚本正常工作。但我在提交按钮之前需要它。带有提交按钮的表单位于通过JSF ajax调用加载的内容中。因此,在ajax刷新中调用synchronus服务调用不起作用。
该网站描述了一个基于状态的页面,首先列出了可用的表单(xhtml),在单击一个之后,它根据bean中更改的状态在同一个面板组中加载该表单。代码看起来类似于:
<h:form id="cm-content-form" role="form" enctype="multipart/form-data">
<h:panelGroup id="cm-page">
<h:panelGroup id="cm-panel">
<!-- navigation panel-->
<h:panelGroup id="cm-nav">
<div class="row">
<h:commandLink value="Home" action="#{cmNavigationBean.navigateHome()}">
<f:ajax render="cm-page"/>
</h:commandLink>
</div>
<div class="row">
<h:commandLink value="Start New Submission" action="#{cmNavigationBean.navigateFormSelect()}">
<f:ajax render="cm-page"/>
</h:commandLink>
</div>
other links
</h:panelGroup>
<!-- main content panel based on state maintained in managed bean-->
<h:panelGroup layout="block" id="cm-content">
<c:choose>
<c:when test="#{cmNavigationBean.isHomeState()}">
<h:panelGroup layout="block" id="cm-content-home">
Welcome to home page.
</h:panelGroup>
</c:when>
<c:when test="#{cmNavigationBean.isFormSelectState()}">
<h:panelGroup layout="block" id="cm-content-form-list">
<h3>Please select the form you wish to submit.</h3>
<hr/>
<c:forEach var="form" items="#{cmNavigationBean.getAllActiveForms()}">
<h:outputText value="#{form.agency.name} - "/><h:commandLink action="#{cmNavigationBean.navigateForm(form.id)}" value="#{form.name}">
<f:ajax render="cm-content"/>
</h:commandLink>
<br/>
</c:forEach>
</h:panelGroup>
</c:when>
<c:when test="#{cmNavigationBean.isFormSubmitState()}">
<h:panelGroup id="cm-content-form-submit">
<c:if test="#{cmFormBean.formsEnabled()}">
<!-- pasting form here -->
<ui:include src="#{cmFormBean.getCurrentFormURL()}"/>
<!-- captcha goes here -->
<script type="text/javascript" src="https://oursite.org/captchaservice/generate.htm?userName=aUser">
</script>
<!-- custom control with submit button goes here -->
<div class="row">
<cmi:confirmationPanel
confirmationPanelTarget="cm-content"
confirmationPanelText="Please fill out the form above."
confirmationPanelAcceptButton="Submit"
confirmationPanelAcceptText="Are you sure you want to submit this form?"
confirmationPanelAcceptAction="navigateFormSubmit"
confirmationPanelRejectButton="Cancel"
confirmationPanelRejectText="Are you sure you want to discard this form?"
confirmationPanelRejectAction="navigateHome"/>
</div>
</c:if>
</h:panelGroup>
</c:when>
</form>
...
示例中的java脚本在常规页面中工作并显示google capthca服务面板。
<script src="https://oursite.org/captchaservice/generate.htm?userName=aUser">
</script>
但是当我把它放在面板组中时,它会显示错误:
主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看http://xhr.spec.whatwg.org/。&#34;
但是,当我在浏览器中刷新页面时,它会显示出来。
我试图通过使用oncomplete =&#34; javascript:location.reload(true)&#34;来强制从html页面刷新,但是没有用。
我试图把它放在自定义控件中并尝试在ajax刷新期间包含,显然它也在做同样的事情。
我尝试在onLoad期间加载脚本,并尝试将返回的数据与<div>
标记相关联,但是获取未捕获的异常。
(()的函数 $(document).ready(function(){ $ .get(&#34; https://oursite.org/captchaservice/generate.htm&#34;,{userName:&#39; aUser&#39;},function(data,status){ captcha = data; });
)
然后在刷新期间调用此函数
getCaptcha = function () {
alert(captcha);
$('#captcha').html(captcha);
}
Althoguh我在警告对话框中看到了内容,但后面跟着一个空页面。
应该有一个简单的解决方案,我不知道。你们中的任何人都能指出我的方向吗?非常感谢。