为什么dojo的xhr调用获取JSP文件内容不会像处理Firefox和Chrome那样处理InternetExplorer中的onShow事件?

时间:2014-01-02 05:39:49

标签: ajax jsp dojo

我正在尝试解决仅在IE浏览器中看到的问题,而不是Firefox或Chrome。我正在使用dojox.widget.Wizard和dojox.widget.WizardPane,其中向导中的每个窗格都被添加到向导中,如下所示:

nextWizPane = new dojox.widget.WizardPane({
paneId: chosenPaneId,
passFunction: handleNext,
onShow: showingPane
}).placeAt(wizard, newPaneIndex);

loadPaneContents(nextWizPane);

其中loadPaneContents()函数使用“dojo / request / xhr”模块动态加载新WizardPane的内容。 xhr的“then”函数接受匿名回调函数,该函数接受JSP文件的内容,该文件最终用于设置WizardPane的内容,如下所示:

xhr(contextPath+"/lib/wizardPanes/UrsPage_"+wizPane.paneId+".jsp", 
  {sync:true}).then(function(responseFromXhr) {
    nextWizPane.set("content", responseFromXhr);
});

xhr加载的文件,例如UrsPage_1_1_1.jsp,定义向导窗格的内容。 UrsPage_1_1_1.jsp文件的内容如下所示:

<%@page session="true" contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:setBundle basename="/WEB-INF/config/resourcebundle"/>

<div wizardpageidline data-dojo-type="dijit/form/Form" id="1_1_1" encType="multipart/form-data" action="" method="" paneName="Contact Information">
  <script type="dojo/on" data-dojo-event="show" data-dojo-args="e">
    console.log("UP111 onShow form2");      
    alert("UP111 onShow form2");
    require(
      { packages:[ { name:'lib', location:'/lib' } ] },
    ["lib/UrsController",
        "dojo/on",
        "dojo/dom",
        "dojo/domReady!"
    ], function(ursController, dojoOn, dom){

        dojoOn(dom.byId("mailingAddressSameAsPrincipal"), "change", function(){
            console.log("UP111 changed SameAsMailingAddress this.checked="+this.checked);
            alert("UP111 checked Same As box="+this.checked);
        });
    });
  </script>

...<snipped dojo/dijit/HTML markup>
</div>

当在Chrome和Firefox中运行时会显示上面的日志和警报调用,但在IE8中运行时会完全忽略并执行上述警报。我错过了什么?被剪切的JSP文件的标记确实包含在IE,Firefox和Chrome中成功解析的dojo / dijit标记,因此它不像dojo解析器忽略整个文件,只是外部的onShow。如何调试此问题将不胜感激。

谢谢你, 格里

1 个答案:

答案 0 :(得分:0)

我在IE11中遇到了同样的问题,并将其缩小到这个:在异步块中,似乎IE已经失去了config.contextPath的范围。您可能需要了解如何获取此值并将其作为可以传递给异步调用的属性存储在窗口小部件中。例:    var prefix = config.contextPath;    topic.publish(“/ widget / selected”,row.id,prefix); //可能需要this.prefix,具体取决于您获取/存储属性的位置以及使用位置。

出于我的目的,代码在IE调试面板或控制台打开时执行正常,但在控制台关闭时失败。警报声明是唯一可以帮助解决这个问题的事情。基本上,在执行ajax之前确认您正在构建的URL