我正在使用JavaScript和jQuery构建照片滑块。它在chrome中完美运行,但在IE6中我并不知道我的大多数客户都会查看它。
我有这个功能:
function getFacebookPhotos(photoCount, pageId) {
var picsUrl = "http://api.facebook.com/method/fql.query?query=SELECT%20src_big,%20src_big_height,%20src_big_width%20FROM%20photo%20WHERE%20pid%20IN%20(SELECT%20pid%20FROM%20photo_tag%20WHERE%20subject='243117879034102')%20OR%20pid%20IN%20(SELECT%20pid%20FROM%20photo%20WHERE%20aid%20IN%20(SELECT%20aid%20FROM%20album%20WHERE%20owner='" + pageId + "'%20AND%20type!='profile'))";
var responseText = $.ajax({
url: picsUrl,
async: false,
dataType: "xml",
success: function(text) {
responseText = text;
}
}).responseText;
var xmlDoc = $.parseXML(responseText);
var $xml = $(xmlDoc);
var $photos = $xml.find("photo");
var resultantPhotos = [];
for (var i = 0; i < photoCount; i++)
{
var $element = $($photos[i]);
var $src_big = $element.find("src_big");
var $text = $src_big.text();
resultantPhotos.push($text);
}
return resultantPhotos;
}
它从facebook查询中获取XML响应,解析它,并从facebook页面返回一个照片网址数组。在Chrome中,这可行,但在Internet Explorer 6中,返回的照片数组为空。在这两种浏览器中,代码都可以正常执行。
我使用这个JavaScript来解析XML:
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.open("GET", picsUrl, false); // Throws permission error in IE
xmlHttp.send(null);
var photos;
if (window.DOMParser)
{
var parser = new DOMParser();
xml = parser.parseFromString(responseText, "text/xml");
}
else // Internet Explorer
{
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(responseText);
}
photos = xml.getElementsByTagName("photo");
但是,这仍然让我在IE浏览器中出错,同时还在Chrome中工作,所以我转而使用jQuery。 你知道它有什么问题吗?
答案 0 :(得分:0)
这可能是也可能不准确,但我认为解决方案是根本不使用javascript,而是使用PHP代替。
我的错误是由于javascript缺少访问远程文件的权限造成的。当我尝试使用此PHP代码首先检索XML输出时:
<?php file_put_contents("query.xml", file_get_contents($facebookPicsUrl)); ?>
我的javascript代码
xml.open("GET","query.xml",false);
完美地工作,但它让我意识到我应该使用PHP,不仅因为将xml文件下载到我的服务器是笨重的,而且因为PHP可以完成我的JS用simplexml_load_file做的所有事情。我到处寻找“如何让IE打开远程XML”,他们说“你做不到”。无论是否可能,在PHP中执行此操作都会容易得多。