我正在使用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
?>
非常感谢任何想法/帮助
答案 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()调用之前在您的页面上应用该属性,并且它很可能会消除此问题。