0

我正在用 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 页面返回一组照片 url。在 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。你知道它有什么问题吗?

4

1 回答 1

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 中执行此操作会容易得多。

于 2013-08-20T18:18:53.437 回答