javascript - 有什么不同?为什么 JavaScript 不能同时处理这两种响应?

标签 javascript php xml http-get rss-reader

我正在开发一个 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/

相关文章:

java - Hibernate 5 是否支持基于 XML 的实体映射?

python - 可以告诉 ElementTree 保留属性的顺序吗?

Javascript 数字变量比较不起作用

Javascript XSLT 转换返回 null

php - 按另一个表中的帖子排序

php - 显示带有从 mysql 检索到的标记的谷歌地图

android - 如何将空格字符放入 XML 中的字符串名称中?

javascript - 如何修改文本节点的 HTML(类型 3)/如何将其包装在 HTML span 中

Javascript 函数未正常运行

php - 有哪些方法可以改进这个长 mysql 搜索查询?