有什么不同?为什么JavaScript不能同时响应?

时间:2015-04-04 00:17:12

标签: javascript php xml http-get rss-reader

我正在使用尽可能多的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;
?> 

1 个答案:

答案 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提供了不同的数据。由于尚未提供不同的数据,因此没有更多的数据可以回答您的问题。

我希望答案对您有用,它可以帮助您继续工作。例如,您现在可以查看具体数据并发现即使如此,您也希望数据相同,通过直接比较,了解差异。