我创建了这个网站
http://www.tylertracy.com/testing/Xml/App%20veiwer%205-28.php
它适用于大多数浏览器和iPhone模拟器,但它不适用于真正的iPhone。我已将其缩小到XMLHttpRequest()。似乎当我得到xml时,我无法读取[object Element]的子节点它返回undefined。这是令人困惑的,我不明白。
这是我获取XML的代码
function convertXml (path) {
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest(); // code for IE7+, Firefox, Chrome, Opera, Safari
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); // code for IE6, IE5
}
xmlhttp.open("GET",path,false);
xmlhttp.send();
xml=xmlhttp.responseXML.getElementsByTagName("app");
var foo = [];
for (var i = 0; i <= xml.length-1; i++) {
foo[i] = {};
for (var j = 0; j <=xml[i].children.length-1; j++) { // get all children of the app and make it a part in the object
foo[i][xml[i].children[j].tagName] = xml[i].children[j].innerHTML.trim();//super complicated
}
}
return foo;
}
经过多次实验,我发现在iPhone上,请求返回一个[object Document],而计算机返回一个[object XMLDocument]。我不知道这意味着什么,但我觉得这是我的问题所在。有没有办法在这些之间进行转换?
此后我将代码更新为jQuery,看看问题是否仍然存在,它确实存在。
这是新的jQuery
function getXML (path) {
//gets text version of the xml doc
var response = $.ajax({ type: "GET",
url: "testingXml.xml",
async: false,
}).responseText;
//converts text into xmlDoc
parser=new DOMParser();
xmlDoc=parser.parseFromString(response,"text/xml");
return xmlDoc;
}
function xmlToObject (x) {
var xml = x.getElementsByTagName("app"); //get all the xml from the root
var foo = [];
for (var i = 0; i <= xml.length-1; i++) {
foo[i] = {}; // make the object
for (var j = 0; j <=xml[i].children.length-1; j++) { //get all of the children of the main tag
foo[i][xml[i].children[j].tagName] = xml[i].children[j].innerHTML.trim(); //super complicated
}
}
return foo;
}
然后要获取数组,您可以编写此代码xmlToObject(getXML("testingXml.xml"))
问题仍在发生,在电脑上还不错,但在iPhone上(谷歌,Safari,Firefox,奥普拉)似乎xml似乎没有显示。
答案 0 :(得分:1)
我正在
打开页面时,在谷歌Chrome控制台中主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。如需更多帮助,请查看http://xhr.spec.whatwg.org/
。这可能是它在iOS上无法加载的原因:Apple决定在移动设备上忽略此类请求,以防止浏览器冻结。
尝试
xmlhttp.open("GET",path,true);
以及MDN's "Synchronous and asynchronous requests"中描述的xhr.onload
处理程序。