我正在使用尽可能多的Javascript的RSS阅读器。由于同源策略,我必须使用其他解决方案请求源的XML文件。首先,我使用了雅虎!查询语言(YQL)但是要独立我试着编写一些PHP代码。虽然两种解决方案的响应几乎相同(使用YQL存在一些Yahoo数据),但使用PHP的解决方案不起作用。
YQL解决方案
function yahoo() {
// request the xml
$.get("https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fnews.yahoo.com%2Frss%2Ftopstories'&diagnostics=false", function (data) {
// save the data (title, content, link, date) to the localStorage
$(data).find("item").each(function () {
el = $(this);
if (!el.find("title").text() || !el.find("description").text() || !el.find("link").text() || !el.find("pubDate").text()) {
console.log("errorEntry");
} else {
localStorage.setItem('titleEntry' , el.find("title").text());
localStorage.setItem('contentEntry' , el.find("description").text());
localStorage.setItem('linkEntry' , el.find("link").text());
localStorage.setItem('dateEntry' , el.find("pubDate").text());
}
});
});
}
我的解决方案 JavaScript的:
function php() {
// request the xml
$.get("rss_request.php?feedUrl=http://news.yahoo.com/rss/topstories", function (data) {
// save the data (title, content, link, date) to the localStorage
$(data).find("item").each(function () {
el = $(this);
if (!el.find("title").text() || !el.find("description").text() || !el.find("link").text() || !el.find("pubDate").text()) {
console.log("errorEntry");
} else {
localStorage.setItem('titleEntry' , el.find("title").text());
localStorage.setItem('contentEntry' , el.find("description").text());
localStorage.setItem('linkEntry' , el.find("link").text());
localStorage.setItem('dateEntry' , el.find("pubDate").text());
localStorage.setItem('typeEntry' , "rss");
}
});
});
}
PHP(rss_request.php):
<?php
$url = $_GET["feedUrl"];
$response = file_get_contents ($url);
echo $response;
?>
答案 0 :(得分:1)
有什么区别?为什么JavaScript不能同时使用这两种响应?
让我们在这里应用一些简单的逻辑,这在你寻找原因时很有用。
你问的是差异。您给出了两个代码示例。这两个代码示例的区别在于:
答:
$.get("https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D'http%3A%2F%2Fnews.yahoo.com%2Frss%2Ftopstories'&diagnostics=false", function (data) {
B:
$.get("rss_request.php?feedUrl=http://news.yahoo.com/rss/topstories", function (data) {
那么这里有什么不同?网址不同!
现在你的问题是双折的,所以发现差异只是一部分,让我们回顾第二部分:
为什么JavaScript不能同时使用这两种响应?
隐含地命名区别,所以原因是因为这两个URL提供了不同的数据。由于尚未提供不同的数据,因此没有更多的数据可以回答您的问题。
我希望答案对您有用,它可以帮助您继续工作。例如,您现在可以查看具体数据并发现即使如此,您也希望数据相同,通过直接比较,了解差异。