Ajax 未在IE8中解析动态注入的dojo小部件

Ajax 未在IE8中解析动态注入的dojo小部件,ajax,parsing,dojo,Ajax,Parsing,Dojo,当我将小部件动态注入页面时。控制台将打印错误,如下所示: =============================================================[对象错误] Error parsing in _ContentSetter#Setter_dijit_TitlePane_0_pane_0[object Error] Error undefined running custom onLoad code: This deferred has already been

当我将小部件动态注入页面时。控制台将打印错误,如下所示:

=============================================================[对象错误]

Error parsing in _ContentSetter#Setter_dijit_TitlePane_0_pane_0[object Error] Error undefined running custom onLoad code: This deferred has already been resolved
==========================================

我用IE8、Chrome(10.0.648.205)、FireFox来测试它?3.6.16对于dojo1.6,此错误仅发生在IE8中

下面是我的测试jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>test ie</title>
<style type="text/css">
    @import "../dojo16/dijit/themes/claro/claro.css";
    @import "../dojo16/dojo/resources/dojo.css"
    @import "../dojo16/dojox/grid/resources/Grid.css";
    @import "../dojo16/dojox/grid/resources/claroGrid.css";
</style>
<script type="text/javascript" src="../dojo16/dojo/dojo.js"
        djConfig="parseOnLoad: true">

</script>
<script type="text/javascript">
    dojo.require("dojo.parser");
    dojo.require("dijit.TitlePane");
    dojo.require("dijit.Dialog");
    dojo.require("dojox.data.HtmlStore");
    dojo.require("dojox.grid.DataGrid");

        dojo.addOnLoad(function() {             
                var reportDiv = dojo.byId("report");
                reportDiv.innerHTML = "<H1>Network Statistics Report</H1><table style='display:none' id='W3_TAB_STAGEN_source_table'>"
                + "<thead><tr><th>name</th><th>value</th></tr></thead>"
                + "<tbody<tr><td>Report Name</td><td>Whole Network View</td></tr></tbody>"
                + "</table><div dataId='W3_TAB_STAGEN_source_table' jsId='W3_TAB_STAGEN_store' dojoType='dojox.data.HtmlStore'></div>"
                + "<script type='text/javascript'>"
                +                               "var W3_TAB_STAGEN_layout = [["
                +       "                               {"
                +       "                                       field : 'name', "
                +   "                                   name : 'Name', "
                +   "                                   width : '50%', "
        +       "                                       headerStyles : 'text-align: center' "
        +       "                               },"
                +   "                                   {"
                +       "                                   field : 'value',"
                +   "                                   name : 'Value',"
                +   "                                   width : '50%', "
                +   "                                   headerStyles : 'text-align: center' "
                +   "               }"
                +   "                           ]] ; "
                +   " </scr" + "ipt>"           
                +   "       <div style='margin: 5px; width: 50%' title='General Information' dojoType='dijit.TitlePane'>"
                +   "<table rowCount='1' query='{}' structure='W3_TAB_STAGEN_layout' store='W3_TAB_STAGEN_store' columnReordering='true' autoHeight='true' dojoType='dojox.grid.DataGrid' class='grid' id='W3_TAB_STAGEN'></table>"
                +   "</div>";


                var scriptStr = dojo.query("script", reportDiv)[0].innerHTML;
                console.log(scriptStr);
                dojo.eval(scriptStr);
                dojo.parser.parse(reportDiv);
        });
</script>
</head>
<body class="claro">
        <!-- menu -->
        <table style="width: 100%">
                <tbody>
                        <tr>
                                <td style="width: 100%;">
                                        <div id="menubar"></div>
                        </tr>
                        </td>
                </tbody>
        </table>

        <BR>
        <div id="report" style="width: 100%; height: 100%">
        </div>
</body>
</html>

测试ie
@导入“./dojo16/dijit/themes/claro/claro.css”;
@导入“./dojo16/dojo/resources/dojo.css”
@导入“./dojo16/dojox/grid/resources/grid.css”;
@导入“./dojo16/dojox/grid/resources/claroGrid.css”;
require(“dojo.parser”);
dojo.require(“dijit.TitlePane”);
require(“dijit.Dialog”);
require(“dojox.data.HtmlStore”);
require(“dojox.grid.DataGrid”);
dojo.addOnLoad(函数(){
var reportDiv=dojo.byId(“报告”);
reportDiv.innerHTML=“网络统计报告”
+“名称值”

+“你可能有很好的理由这样做(好吧..很好),但我不明白你为什么把
W3\u TAB\u STAGEN\u layout
放在HTML/Javascript字符串中

<script type="text/javascript">
    dojo.require("dojo.parser");
    dojo.require("dijit.TitlePane");
    dojo.require("dijit.Dialog");
    dojo.require("dojox.data.HtmlStore");
    dojo.require("dojox.grid.DataGrid");

    var W3_TAB_STAGEN_layout = [[
        {
            field : 'name', 
            name : 'Name', 
            width : '50%',
            headerStyles : 'text-align: center'
        },
        {
            field : 'value',
            name : 'Value',
            width : '50%',
            headerStyles : 'text-align: center'
        }
        ]];


        dojo.addOnLoad(function() {             
                var reportDiv = dojo.byId("report");
                reportDiv.innerHTML = "<H1>Network Statistics Report</H1><table style='display:none' id='W3_TAB_STAGEN_source_table'>"
                + "<thead><tr><th>name</th><th>value</th></tr></thead>"
                + "<tbody<tr><td>Report Name</td><td>Whole Network View</td></tr></tbody>"
                + "</table><div dataId='W3_TAB_STAGEN_source_table' jsId='W3_TAB_STAGEN_store' dojoType='dojox.data.HtmlStore'></div>"
                + "<div style='margin: 5px; width: 50%' title='General Information' dojoType='dijit.TitlePane'>"
                +   "<table rowCount='1' query='{}' structure='W3_TAB_STAGEN_layout' store='W3_TAB_STAGEN_store' columnReordering='true' autoHeight='true' dojoType='dojox.grid.DataGrid' class='grid' id='W3_TAB_STAGEN'></table>"
                +   "</div>";

    /*
                var scriptStr = dojo.query("script", reportDiv)[0].innerHTML;
                console.log(scriptStr);
                dojo.eval(scriptStr);
    */
                dojo.parser.parse(reportDiv);
        });
</script>

require(“dojo.parser”);
dojo.require(“dijit.TitlePane”);
require(“dijit.Dialog”);
require(“dojox.data.HtmlStore”);
require(“dojox.grid.DataGrid”);
变量W3\u选项卡\u阶段\u布局=[[
{
字段:“名称”,
姓名:'姓名',
宽度:“50%”,
标题样式:“文本对齐:居中”
},
{
字段:“值”,
名称:“值”,
宽度:“50%”,
标题样式:“文本对齐:居中”
}
]];
dojo.addOnLoad(函数(){
var reportDiv=dojo.byId(“报告”);
reportDiv.innerHTML=“网络统计报告”
+“名称值”

+ "感谢您的友好回复。该示例仅用于重现该问题。实际情况是reportDiv将用于呈现ajax响应,该响应可能包含各种java脚本代码和dojo小部件,您事先不知道。我发现有一种方法可以解决该问题。只需直接声明为dojox.layout.ContentPane,然后调用dibyId('reprtDiv').set('content',AJAX\u RESPONSE)。它在三种浏览器中工作。