所以,我是Javascript的新手,让我们把它排除在外。
无论如何,我有以下代码可以在IE中工作,但不能在Chrome或FF中工作。它应该从Reddit RSS中获取数据,然后输出它,仅此而已。它只在IE中运行。有人能解释我在这里做错了什么吗?
<html>
<head>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var result = null;
$.ajax({
url: "http://www.reddit.com/.rss",
type: 'get',
dataType: 'html',
async: false,
success: function(data) {
result = data;
}
});
document.write(result);
</script>
</head>
</body>
</html>
$.ajax({
url: "http://www.reddit.com/.rss",
type: 'get', dataType: 'html',
async: false,
success: function(data) {
$("#some-div").html(data);
} });
由于$.ajax
是异步的,您有竞争条件。改为在成功处理程序中显示结果,以确保请求已完成。
$.ajax({
url: "http://www.reddit.com/.rss",
type: 'get',
dataType: 'html',
async: false,
success: function(data) {
document.write(data);
}
});
更新
由于您将async设置为false,因此上述语句不适用。然而,我从来没有找到使用document.write()
的好理由,这可能是您问题的一部分。尝试使用其他方法将数据注入页面,如.html()
、.append()
、alert()
等。在document.ready
中这样做也不会有什么坏处。
$(document).ready(function() {
var result = null;
$.ajax({
url: "http://www.reddit.com/.rss",
type: 'get',
dataType: 'html',
async: false,
success: function(data) {
result = data;
}
});
alert(result);
$("body").append(result);
});
以这种方式处理:
(function(url, callback) {
jQuery.ajax({
url: document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(url),
dataType: 'json',
success: function(data) {
callback(data.responseData.feed);
}
});
})('http://www.reddit.com/.rss', function(feed) {
var entries = feed.entries,
feedList = '';
for (var i = 0; i < entries.length; i++) {
feedList += '<li><a href="' + entries[i].link + '">' + entries[i].title + '</a></li>';
}
jQuery('.rssfeed > ul').append(feedList);
});
HTML:
<div class="rssfeed">
<h4>RSS News</h4>
<ul></ul>
</div>
示例:http://jsfiddle.net/QusQC/