我需要在AJAX函数中使用jquery读取xml数据,这在firefox中工作正常...但是我被IE浏览器困住了...我无法读取xml。程序需要从xml文件中读取“proptype”。我已经发出警报提示(theXml),但是我没有在IE中给出答案但是它在firefox浏览器中工作
这是我的代码..
<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="../scripts/jquery-1.9.1.min.js"></script>
<script src="../scripts/jquery-migrate-1.2.1.min.js"></script>
<script>
$(document).ready(function () {
testXml();
});
function testXml() {
$.ajax({
type: 'GET',
url: 'XML_estatesIT_op4.xml',
dataType: ($.browser.msie) ? "text" : "xml",
success: function (xml) {
theXml = parseXml(xml);
alert(theXml);
$(theXml).find("property").each(function () {
var b1 = $(this).find('proptype').text();
alert(b1);
});
},
error: function () {
alert("An error occurred while processing XML file.");
}
});
}
function parseXml(xml) {
if (jQuery.browser.msie) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(xml);
xml = xmlDoc;
}
return xml;
}
</script>
</head>
<body>
</body>
</html>
===== XML =====
<properties>
<property>
<propcode>DEMO1_000001</propcode>
<address6>Cambridgeshire</address6>
<postcode>PE28 2BG</postcode>
<ccode>UK</ccode>
<priceask>360,000</priceask>
</property>
</properties>
答案 0 :(得分:1)
function parseXML(xml) {
if (jQuery.browser.msie) {
alert("dd3");
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML(xml);
xml = xmlDoc;
}
alert("dd4");
return xml;
}
function searchThis() {
alert("dd1");
$.ajax({
type: "GET",
url: XMLSource,
dataType: ($.browser.msie) ? "text" : "xml",
success: function (xml) {
alert("dd2");
var newXML = parseXML(xml);
loadPublication(newXML)
}
});
}
喜欢这个为IE工作。
答案 1 :(得分:1)
您无需重复xml文件名,并在parseXML中再次执行相同的操作。
这里的技巧是禁用缓存。但IE仍然有时不会禁用缓存。因此,将时间戳作为查询字符串与url中的xml文件名一起添加,以解决问题。我测试了它并在IE和其他浏览器上100%工作。
$.ajax({
type: 'GET',
url: "XML_file.xml?timestamp=" + new Date().getTime(), // add the timestamp to the url to avoid caching in IE
dataType: ($.browser.msie) ? "text" : "xml",
cache: "false",
success: function (xml) {
var processedXML = parseXml(xml);
$(processedXML).find('my record').each(function () { //code }
}
});
function parseXml(xml) {
if (jQuery.browser.msie) { // Only for IE
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(xml);
xml = xmlDoc;
}
return xml;
}
答案 2 :(得分:0)
我通过将chrome.exe --allow-file-access-from-files添加到其属性目标位置而不是获取IE来管理chrome的问题。那么任何人都可以发布你的答案。
答案 3 :(得分:0)
最后我找到了解决方案,诀窍是为版本低于10的IE浏览器使用单独的代码XML。
因此,每次调用Ajax时,都会使用输入参数XML Dom或文本调用parseXml,具体取决于浏览器....如果当前浏览器是IE,则上传XML文档,根据Microsoft标准处理它并返回XML Ajax中的其余进程按预期进行!!
注意:jQuery 1.9不支持browser.msie,但您可以添加jquery-migrate-1.2.1.min.js以使其兼容或使用userAgent并查找哪个是当前浏览器
$.ajax({
type: 'GET',
url: 'XML_file.xml',
dataType: ($.browser.msie) ? "text" : "xml",
success: function (xml) {
var processedXML = parseXml(xml);
$(processedXML).find('my record').each(function () { //code }
});
function parseXml(xml) {
if ($.browser.msie) {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "XML_file.xml", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
xml = xmlDoc;
}
return xml;
}