2010-03-08 110 views
2

我想通過dojo.XHRGet追加一些XML到dijit.layout.ContentPane。在Firefox(3.6)中一切正常,但在Chrome中,我只返回特定ContentPane中的「未定義」。dojo/dijit ContentPane設置內容

我的代碼看起來是這樣的:

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

你能告訴我們xml是什麼樣子嗎? – Philippe 2010-03-10 13:00:40

+0

編輯添加XML。 – Kitson 2010-03-11 15:33:48

回答

1

cp.containerNode.appendChild(data.firstChild)是否工作?將ContentPane作爲可接受任意XML節點的通用容器處理可能會要求太多。它的主要用例是 - 而且一直是 - 注入HTML。不是說它不能工作,但它是一個在這個小部件中沒有很好探索的角落案例。

+0

我想我也嘗試過cp.containerNode.appendChild(),它在Firefox中可以正常工作,但是我在WebKit中遇到了一個問題......基本上,我認爲,正如您指出的那樣,它基本上是一個邊界案例,WebKit基本上拒絕處理來自其他文檔的東西,而Firefox/Gecko似乎並不關心。我放棄了這一點,並簡單地將我想要做的事情轉換爲dojox.gfx。 – Kitson 2010-03-22 12:35:52

1

我不確定我最近遇到的是否與你一樣。 我正在使用外部JavaScript文件加載在HTML頭部分作爲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;三叉戟/ 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) Timestamp:Tue,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.query.length} {ioArgs.url + =(ioArgs.url.indexOf(「?」)== -1?「?」:「&」)+ ioArgs.query; ioArgs.query = null; }
}

我粗略解決方案只是評論「的indexOf」行了,然後我的web應用程序運行沒有任何錯誤。 無論如何,我不確定這條線會做什麼?