我正在开发一个 RSS 阅读器,尽可能多地使用 Javascript。由于同源策略,我必须使用另一个解决方案请求提要的 XML 文件。首先我使用雅虎!查询语言(YQL),但为了独立,我尝试编写一些 PHP 代码。尽管两种解决方案的响应几乎相同(使用 YQL 有一些雅虎数据),但我使用 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;
?>
最佳答案
What's the difference? Why can't JavaScript work with both responses?
让我们在这里应用一些简单的逻辑,这在您查找原因时很有用。
您询问差异。您给出两个代码示例。这两个代码示例的区别在于:
<小时/>A:
$.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) {
那么这里有什么不同呢?网址不同!
现在你的问题有两个方面,所以找出差异只是一部分,让我们回顾一下第二部分:
Why can't JavaScript work with both responses?
这隐含着差异,所以原因是因为这两个 URL 提供了不同的数据。由于尚未提供不同的数据,因此无法编写更多内容来回答您的问题。
希望我的回答对您有用,并帮助您继续工作。例如,您现在可以查看具体数据,发现即使您期望数据是相同的,也可以通过直接比较来了解差异。
关于javascript - 有什么不同?为什么 JavaScript 不能同时处理这两种响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29441381/