$ .get不返回Internet Explorer中的任何数据

时间:2011-02-11 00:40:58

标签: php jquery ajax internet-explorer get

我正在使用JQuery的$ .get函数来获取Twitter提要并在我的网站上显示它。我不知道为什么它似乎没有得到任何数据(即函数内的代码(d){...}没有得到调用)。它在我尝试过的其他一切都很好。我之前也使用过这段代码没有任何问题,我唯一能想到的是它是通过https运行的。

(请注意,我已从Feed网址中删除了Twitter用户ID)

JS:

    $.get('proxy.php?url=http://twitter.com/statuses/user_timeline/999999999.rss', function(d) {    
        $(d).find('item').each(function() {
            var theItem = $(this);
            var title = theItem.find('title').text();


            var date = new Date(theItem.find('pubDate').text());
            var alink = theItem.find('link').text();

            // code ommitted (inserts tweet into page)
        });
  });

proxy.php:

<?php
    // PHP Proxy
    // Loads a XML from any location. Used with Flash/Flex apps to bypass security restrictions
    // Author: Paulo Fierro
    // January 29, 2006
    // usage: proxy.php?url=http://mysite.com/myxml.xml

    $session = curl_init($_GET['url']);                    // Open the Curl session
    curl_setopt($session, CURLOPT_HEADER, false);          // Don't return HTTP headers
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);   // Do return the contents of the call
    $xml = curl_exec($session);                            // Make the call

    $seconds_to_cache = 300; // five mins (60 * 5)
    $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
    header("Expires: $ts");
    header("Pragma: cache");
    header("Cache-Control: maxage=$seconds_to_cache");
    //header("Content-Type: text/xml");   // Set the content type appropriately
    header("Content-Type: application/rss+xml");
    echo $xml;        // Spit out the xml
    curl_close($session); // And close the session
?>

非常感谢任何想法/帮助

3 个答案:

答案 0 :(得分:1)

想出来。 IE需要将内容类型设置为text / xml。我更改了proxy.php脚本:

header("Content-Type: text/xml");

这就是我所需要的一切。

答案 1 :(得分:0)

编辑:

我想我知道发生了什么。默认情况下,$.get()方法的返回内容类型为text/html。您正在获取XML数据,并立即将其传递到jQuery函数以进行评估。 IE以外的所有浏览器都允许您创建这些XML节点,但如果IE看到它无法识别的元素类型,它将失败。

似乎您的问题的解决方案是明确地说您期望响应中的XML。有关如何解决此问题,请参阅this example

编辑2:

在进一步阅读中,我已经看到,即使使用上面提供的示例,让IE正确解释XML也有好运。如果您仍然遇到问题,可以尝试在服务器上将XML转换为JSON(请参阅http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/以了解完成此操作的class。您将能够在客户端始终使用JSON,但您需要相应地更新success数据处理功能。

原始答案:

我愿意猜测问题是IE非常乐意缓存网址。我建议附加一个额外的,未使用但随机生成的查询字符串参数来解决这个问题。

$.get('proxy.php?url=http://twitter.com/statuses/user_timeline/999999999.rss&rand=' + Math.floor(Math.random()*999999), function() { //omitted });

答案 2 :(得分:0)

之前我遇到过这个问题,而你是对的 - 你主要在IE中看到它。这是修复:

$(document).ready(function() {
  $.ajaxSetup ({
    cache: false
  });
});

在您执行$ .get()调用之前在您的页面上应用该属性,并且它很可能会消除此问题。