2009-12-22 57 views
1

我試圖以跨瀏覽器兼容的方式使用jQuery從xml中提取值。我沒有任何問題在Firefox中這樣做,但不幸的是,這也必須是IE兼容。在IE6中使用jQuery解析XML的問題

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

$(document).ready(function()) { 
    $.get("file.xml", {}, function(parseRefreshTime){ 
    alert('This line is executed in IE.'); 
    $("created", parseRefreshTime).each(function() { 
     alert('This line is *not* executed in IE.'); 
     refreshTime = $(this).text(); 
     //do stuff with refreshtime 
    }); 
    }); 
}); 

這在我的XML文件<created>節點提取節點值。

我引用了jQuery庫在我的網頁,它的正確解析在Firefox,所以我假設我的分析代碼是適當的。我在Firefox中收到了兩條警報,但只有IE中的第一條。

我可以發誓,我有非常相似的代碼工作昨天,但我一定是調整了一些東西,在某種程度上打破它。在與它搏鬥了近一個小時之後,我正在尋找另一雙眼睛。

誰能發現我在做什麼錯在這裏?

+1

你能發佈xml文件的內容嗎? – kgiannakakis 2010-01-07 21:53:47

+1

您的意思是'$(document).ready(function(){'作爲您的第一行嗎? – Lytol 2010-01-08 00:17:56

+0

請記住保持XML相當簡單,因爲IE6的JavaScript引擎*痛苦*慢...... – BobMcGee 2010-01-14 05:09:26

回答

4

有幾件事情:

  • 指定響應類型爲xml您的AJAX請求
  • 裹在$(doc)返回的XML對象,並使用find查詢XML
  • 我覺得你有幾個在第一行中輸入錯別字:reader應該是ready並且您有一個額外的右括號

這在IE6上適用於我。如果這不適合你,你可能想看看你是否正確地提供你的XML。

的index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Test</title> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
     $.get("test.xml", null, function(doc) { 
     $(doc).find('created').each(function() { 
      alert($(this).text()); 
     }) 
     }, 'xml'); 
    }); 
    </script> 
</head> 
<body> 

</body> 
</html> 

的test.xml

<?xml version="1.0" encoding="UTF-8"?> 
<created>2010-01-07 00:00:00</created> 
2

嘗試換用parseRefreshTime$()

$("created", $(parseRefreshTime)).each(function() { 
     alert('This line is *not* executed in IE.'); 
     refreshTime = $(this).text(); 
     //do stuff with refreshtime 
    }); 

或嘗試使用$(parseRefreshTime).find('created')

$(parseRefreshTime).find("created").each(function() { 
     alert('This line is *not* executed in IE.'); 
     refreshTime = $(this).text(); 
     //do stuff with refreshtime 
    }); 

更新: 也嘗試指定typexml

$.get("file.xml", {}, <callback>, "xml") 
+0

解決方案在IE6中:( – 2009-12-22 16:19:28

+0

你有沒有嘗試過指定類型:「xml」? – 2009-12-22 16:52:42

+0

仍然沒有運氣,你的建議在FF中工作正常,但我仍然無法在IE中成功解析值 – 2009-12-22 17:28:53

1

確保「文本/ XML」作爲內容類型的XML文件。

0

我使用的是這樣的:

if ($.browser.msie){ 
     var tempXML = new ActiveXObject("Microsoft.XMLDOM"); 
     tempXML.async = false; 
     tempXML.loadXML(data); 
     xmlc = tempXML; 
     items = $($(xmlc)[0]); 
    } else if(window.DOMParser){ 
     items = $(new DOMParser().parseFromString(data, "text/xml").childNodes[0]); 
    } else { 
     xmlc = data; 
     items = $($(xmlc)[1]); 
    } 

基本上,嘗試微軟。適用於IE的XMLDOM方式。你能提供樣品xml嗎?

0

XML和IE6最大的洞穴食物之一是字符編碼。確保您的瀏覽器可以正確解釋文件。很可能你的web服務器正在爲頁面提供與文檔本身相比不同的編碼頭。