0

我正在尝试从 w3schools 获取以下代码以通过 IIS 工作哦我的本地主机。当我运行它时,我可以看到它正在尝试检索请求的 rss 提要,但不幸的是它永远不会执行。它只允许我查看可供选择的选项,但从不显示它们。

非常感谢您的帮助。

<html>
    <head>
        <script>
            function showRSS(str)
            {
                if (str.length==0)
                  {
                  document.getElementById("rssOutput").innerHTML="";
                  return;
                  }
                if (window.XMLHttpRequest)
                  {// code for IE7+, Firefox, Chrome, Opera, Safari
                  xmlhttp=new XMLHttpRequest();
                  }
                else
                  {// code for IE6, IE5
                  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                  }
                xmlhttp.onreadystatechange=function()
                  {
                  if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                    document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;
                    }
                  }
            xmlhttp.open("GET","getrss.php?q="+str,true);
            xmlhttp.send();
        }
        </script>
    </head>
<body>

    <form>
        <select onchange="showRSS(this.value)">
            <option value="">Select an RSS-feed:</option>
            <option value="Google">Google News</option>
            <option value="MSNBC">MSNBC News</option>
        </select>
    </form>
    <br>
    <div id="rssOutput">RSS-feed will be listed here...</div>
    </body>
</html> 

和 php 文件

<?php
    header('Access-Control-Allow-Origin: *');
    //get the q parameter from URL
    $q=$_GET["q"];

    //find out which feed was selected
    if($q=="Google")
          {
          $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
          }
        elseif($q=="MSNBC")
          {
      $xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
      }

    $xmlDoc = new DOMDocument();
    $xmlDoc->load($xml);

    //get elements from "<channel>"
    $channel=$xmlDoc->getElementsByTagName('channel')->item(0);
    $channel_title = $channel->getElementsByTagName('title')
    ->item(0)->childNodes->item(0)->nodeValue;
    $channel_link = $channel->getElementsByTagName('link')
    ->item(0)->childNodes->item(0)->nodeValue;
    $channel_desc = $channel->getElementsByTagName('description')
    ->item(0)->childNodes->item(0)->nodeValue;

    //output elements from "<channel>"
    echo("<p><a href='" . $channel_link
      . "'>" . $channel_title . "</a>");
    echo("<br>");
    echo($channel_desc . "</p>");

    //get and output "<item>" elements
    $x=$xmlDoc->getElementsByTagName('item');
    for ($i=0; $i<=2; $i++)
      {
      $item_title=$x->item($i)->getElementsByTagName('title')
      ->item(0)->childNodes->item(0)->nodeValue;
      $item_link=$x->item($i)->getElementsByTagName('link')
      ->item(0)->childNodes->item(0)->nodeValue;
      $item_desc=$x->item($i)->getElementsByTagName('description')
      ->item(0)->childNodes->item(0)->nodeValue;

      echo ("<p><a href='" . $item_link
      . "'>" . $item_title . "</a>");
      echo ("<br>");
      echo ($item_desc . "</p>");
      }
?> 
4

2 回答 2

0

因为 html 代码是这样做的:

  • 检查是否选择了 RSS 提要;然后
  • 创建服务器响应准备好时要执行的函数;然后
  • 将请求发送到服务器上的文件

你在你的mac上使用这个吗?我认为 localhost 无法在 os x 中给出服务器响应。或者,您必须使用终端解锁某些东西才能使其工作。

这段代码是正确的,因为它确实在我的服务器上工作。

于 2014-11-15T22:34:00.683 回答
0

也许这是一个跨平台的问题。

如果您使用的是 Chrome,请尝试像这样打开它:

chrome.exe -allow-file-access-from-files
于 2013-04-05T04:10:02.547 回答