简单地jQuery $ .get调用twitter失败了

时间:2010-02-17 22:38:19

标签: javascript jquery ajax twitter

我正在尝试编写我的第一篇AJAX,阅读Twitter上的公共文本。

我有以下几段代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Javascript Twitter client</title>
<script src="library/jquery-1.4.1.js" type="text/javascript"></script>
<script src="twitter.js" type="text/javascript"></script> 
</head>
<body>
<div id="twitter"><p>Blank text</p>
</div>
</body>
</html>

/* twitter.js */
TwitterURL = 'http://twitter.com/statuses/public_timeline.xml';

$(document).ready(function() {
  $.get(TwitterURL, function(data, textStatus) {
       $('#twitter').empty().text(textStatus);
      }
    );
  }
)

当我真正尝试运行它时,我得到一个“成功”的textStatus,但我似乎没有得到任何数据。

在Firebug中,我得到“XML解析错误:找不到元素位置:moz-nullprincipal:{82e4c9e5-0335-4fd8-b295-bfb8e10a6b18}行号1,第1列:”在XML解码窗口中。

如果我使用curl下载URL,我会得到我期待的XML。

我在这里做错了什么?

编辑添加:

看来我实际上是从twitter获取数据,HTTP请求似乎需要大约5.5秒,而firebug在控制台中显示以下内容。如果是相同的原产地政策导致问题,我会期待一个完全不同的显示。

请求标题:

Host: twitter.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.04 (jaunty) Shiretoko/3.5.7
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Origin: null

Http响应头:

Date: Wed, 17 Feb 2010 22:49:32 GMT
Server: hi
X-RateLimit-Limit: 150
X-Transaction:  1266446972-35253-14922
Status: 200 OK
Etag: "4f77a9ba7d3794163fbe9561e4e829f4"-gzip
Last-Modified: Wed, 17 Feb 2010 22:49:32 GMT
X-RateLimit-Remaining: 149
X-Runtime: 0.23618
Content-Type: application/xml; charset=utf-8
Pragma: no-cache
X-RateLimit-Class: api
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
Expires: Tue, 31 Mar 1981 05:00:00 GMT
X-Revision: DEV
X-RateLimit-Reset: 1266450572
Set-Cookie: _twitter_sess=BAh7CDoRdHJhbnNfcHJvbXB0MDoHaWQiJWNlODVlYTQwNWQ0NWIxM2UzODNm%250AN2FhYzBhY2JkZGNlIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFz%250AaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--e866ff422f342146a298acbce26872cf6c04b7e8; domain=.twitter.com; path=/
Vary: Accept-Encoding
Content-Encoding: gzip
Connection: close
Transfer-Encoding: chunked

3 个答案:

答案 0 :(得分:2)

Same origin policy,我猜。

嗯。如果您实际上正在获取数据,但Firefox没有正确解析它...您是否尝试过使用JSON而不是XML(通过请求http://twitter.com/statuses/public_timeline.json)?或者指定jQuery你希望XML回来(通过将"xml"的第三个参数传递给jQuery.get()

答案 1 :(得分:2)

使用下面的代码可以解决问题。

/* Twitter.js - Code gets and displays the latest tweet from Twitter */
twitterURL = 'http://twitter.com/statuses/public_timeline.json';
$(document).ready(function() {
  $.get(twitterURL, function(json) {    
    $('#twitter').empty().text(json[0].text); // Subscript k of json object between 0 and 19 (inclusive)
  }, 'jsonp');
});

但我仍然不确定为什么对XML的GET请求不起作用。

答案 2 :(得分:1)

查看JSONP http://jquery-howto.blogspot.com/2009/04/twitter-jsonjsonp-api-url.html

如果您只想在博客上显示推文,例如,您可以使用http://twitter.com/goodies/widgets