我正在尝试将通过dojo.XHRGet
检索到的某些XML附加到dijit.layout.ContentPane
。在Firefox(3.6)中一切正常,但在Chrome中,我只能在特定的ContentPane中找回'undefined'。
我的代码看起来像这样:
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
});
因为在两个浏览器中我都找回了一个有效的Document
对象,我知道XHRGet工作正常,但是内容的设置方式似乎存在某种差异。有没有更好的方法来处理请求中的返回数据?
有人要求查看我的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>
我已经通过用于XML的WC3验证器运行输出XML以验证它是否有效。就像我之前说过的那样,可以在FireFox 3.6中使用。我在Safari上尝试过,我得到了相同的“未定义”,所以它似乎与Webkit有关。
答案 0 :(得分:1)
cp.containerNode.appendChild(data.firstChild)有效吗?将ContentPane视为可以接受任意XML节点的通用容器可能会过多地询问它。它的主要用例是 - 并且始终是 - 注入HTML。不是说它无法工作,而是它在这个小部件中没有很好地探索的角落案例。
答案 1 :(得分:1)
我不确定我最近的遭遇是否和你一样。 我正在使用html-head部分中加载的外部javascript文件作为cheking用户脚本。 这是我在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.");
});
}
}
在**线。 IE返回此错误。
网页错误详情
用户代理:Mozilla / 4.0(兼容; MSIE 8.0; Windows NT 6.1; Trident / 4.0; SLCC2; .NET&gt; CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2;&gt; Tablet PC 2.0; .NET4.0C; .NET4.0E; AskTB5.6) 时间戳:星期二,2010年10月19日08:24:35 UTC
消息:对象不支持此属性或方法 行:49 查尔:21 代码:0 URI:http://localhost:8080/TestESarabun/script/loginCheck.js
在我跟踪到dojo库并使用这段代码停止在文件dojo / _base / xhr.js之后。
dojo._ioAddQueryToUrl = function(/ * dojo .__ IoCallbackArgs * / ioArgs){
// summary:将io延迟构造发现的查询参数添加到URL。
//仅将此用于基本为GET类型操作的操作。
如果(ioArgs.query.length){
ioArgs.url + =(ioArgs.url.indexOf(“?”)== -1?“?”:“&amp;”)+ ioArgs.query;
ioArgs.query = null;
}
}
我的粗略解决方案只是注释“indexOf”行,然后,我的Web应用程序运行没有任何错误。 无论如何,我不确定这条线要做什么?