Javascript dojo/dijit内容窗格设置内容

Javascript dojo/dijit内容窗格设置内容,javascript,dom,dojo,Javascript,Dom,Dojo,我正在尝试将通过dojo.XHRGet检索到的一些XML附加到dijit.layout.ContentPane中。在Firefox(3.6)中一切正常,但在Chrome中,我只在特定的内容窗格中返回“未定义” 我的代码如下所示: var cp = dijit.byId("mapDetailsPane"); cp.destroyDescendants(); // there are some existing Widgets/content I want to clear

我正在尝试将通过
dojo.XHRGet
检索到的一些XML附加到
dijit.layout.ContentPane
中。在Firefox(3.6)中一切正常,但在Chrome中,我只在特定的内容窗格中返回“未定义”

我的代码如下所示:

var cp = dijit.byId("mapDetailsPane");
cp.destroyDescendants(); // there are some existing Widgets/content I want to clear
                         // and replace with the new content

var xhrData = {
  url : "getsomexml.php",
  handleAs: "xml",
  preventCache: true,
  failOk: true
};

var deferred = new dojo.xhrGet(xhrData);
deferred.addCallback(function(data) {
  console.log(data.firstChild); // get a DOM object in both Firebug 
                                // and Chrome Dev Tools
  cp.attr("content",data.firstChild); // get the XML appended to the doc in Firefox,
                                      // but "undefined" in Chrome
});
因为在这两种浏览器中,我都返回了一个有效的
文档
对象,我知道Xhret工作得很好,但内容的设置方式似乎有些不同。是否有更好的方法来处理来自请求的返回数据

有人请求查看我的XML,所以这里是它的一部分

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" 
 xmlns="http://www.w3.org/2000/svg" 
 xmlns:xlink="http://www.w3.org/1999/xlink" 
 version="1.1" width="672" height="1674">
 <defs>
   <style type="text/css">
     <![CDATA[ ...bunch of CSS...
     ]]>
   </style>
   <marker refX="0" refY="0" orient="auto" id="A00End" style="overflow: visible;">
   ...bunch more defs...
 </defs>
 <g id="endpoints">
   ...bunch of SVG with a some...
   <a xlink:href="javascript:gotoLogLine(16423,55);" xlink:type="simple">...more svg...</a>
 </g>
</svg>

…更多的定义。。。
…一堆SVG和一些。。。

我已经通过WC3 XML验证程序运行了输出XML,以验证它是否有效。正如我之前所说,它在Firefox3.6中工作。我在Safari上试用了它,得到了相同的“未定义”,因此它似乎与Webkit有关。

cp.containerNode.appendChild(data.firstChild)有效吗?将ContentPane视为可以接受任意XML节点的通用容器可能要求太多。它的主要用例是——并且一直是——注入HTML。并不是说它不能工作,但这是一个在这个小部件中没有很好探索的极端情况

我不确定我最近的遭遇是否与你相同。 我正在使用html头部分中加载的外部javascript文件作为检查用户脚本。 这是我在IE中生成错误的代码,但这不是在Firefox中生成错误

function loginCheck()
{
var username = dojo.byId("usernameBox").value;
var password = dojo.byId("passwordBox").value;
var loginForm = dijit.byId("loginDialog");
var mainPage = dijit.byId("entirePage");
var menuUrl = "";

if(username != 'admin' && username != 'user'){
    alert('Incorrect username');
} else {
    if(password != '1234') {
        alert('Incorrect password');
    } else {
        loginForm.hide();
        dojo.style(mainPage.domNode, {visibility:"visible"});
        dojo.doc.title = dojo.doc.title + " : Signed in as [" + username + "]";

        if(username == 'user'){
            menuUrl = "../data/userMenu.json";
        } else if(username == 'admin') {
            menuUrl = "../data/adminMenu.json";
        }

        var treeStore = new dojo.data.ItemFileReadStore({
            url : menuUrl
        });

        var treeModel = new dijit.tree.ForestStoreModel({
            store : treeStore,
            query : {
                "type" : "category"
            },
            childrenAttrs : ["children"]

        });

        var naviTree = new dijit.Tree({
            model : treeModel,
            showRoot : false,
            autoExpand : true
        }, "naviPane");

        dojo.connect(naviTree, "onClick", function(item){
                var targetPage = item.link;

                var targetPane = dijit.byId("centerPane");
                console.log(targetPage);
                **targetPane.attr('href',targetPage);**
                console.log("redirect success.");
        });
    }
}
在**线上。我返回这个错误

网页错误详细信息

用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;Trident/4.0;SLCC2;.NET>CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;Media Center PC 6.0;InfoPath.2;>Tablet PC 2.0;.NET4.0C;.NET4.0E;AskTB5.6) 时间戳:2010年10月19日星期二08:24:35 UTC

消息:对象不支持此属性或方法 第49行 字符:21 代码:0 URI:

在我跟踪到dojo库并在dojo/_base/xhr.js文件中使用这段代码之后

dojo.\u ioAddQueryToUrl=函数(/*dojo.\u IoCallbackArgs*/ioArgs){ //摘要:将io延迟构造发现的查询参数添加到URL。 //仅对基本上是GET类型操作的操作使用此选项。 if(ioArgs.query.length){ ioArgs.url+=(ioArgs.url.indexOf(“?”)==-1?:“&”)+ioArgs.query; ioArgs.query=null; }
}

我的粗略解决方案是只注释“indexOf”行,然后,我的web应用程序运行时没有任何错误。
无论如何,我不确定这行代码将做什么?

你能告诉我们xml是什么样子吗?我想我也尝试了cp.containerNode.appendChild(),它在Firefox中运行良好,但我在WebKit中遇到了一个问题。。。基本上,我认为正如你所指出的,这是一个边缘案例,WebKit基本上拒绝处理来自另一个文档的内容,而Firefox/Gecko似乎并不在意。我已经放弃了这一点,只是将我想做的事情转换成dojox.gfx。