如何使用JQuery从WordPress解析XML Feed?

时间:2016-05-02 03:01:33

标签: jquery html ajax wordpress

我试图从同一个域解析并加载XML(来自WordPress)但我收到以下错误:

  

XMLHttpRequest无法加载http://www.knead-nyc.com/articles/feed/。在预检响应中,Access-Control-Allow-Header不允许使用请求标题字段X-Requested-With。

奇怪的是我的html页面位于: http://knead-nyc.com/test.html 我的WordPress xml Feed在这里:http://www.knead-nyc.com/articles/feed/

我的HTML代码是:

<!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Test Document</title>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script> 
    <script type="text/javascript">
    $(document).ready(function(){

        function parse(document){
            $(document).find("item").each(function(){
                $("#content").append(
                    '<br /> Title: '+$(this).find('title').text()+
                    '<br /> Author: '+$(this).find('link').text()+
                    '</p>'
                );
            });
        };

        $.ajax({
            url: 'http://www.knead-nyc.com/articles/feed/', // name of file you want to parse
            headers: {'X-Requested-With': 'XMLHttpRequest'},
            dataType: "xml",
            success: parse,
            error: function(){alert("Error: Something went wrong");}
        });
    });
    </script>

    </head>

    <body>
    <div id="content"></div>
    </body>

</html> 

我在&#34;文章&#34;中安装了WordPress。夹。为了防止域冲突,我对位于WordPress根目录中的.htaccess文件进行了以下更改,但它无法正常工作:

# BEGIN WordPress
<IfModule mod_rewrite.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Credentials true
RewriteEngine On
RewriteBase /articles/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /articles/index.php [L]
</IfModule>
# END WordPress

1 个答案:

答案 0 :(得分:0)

我做了一些搜索并找到了解决方案。虽然我在同一个域(example.com),但我收到以下错误。 &#34; XMLHttpRequest无法加载http://example.org/。 No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。因此,http://www.example.org来源不允许访问&#34;

我偶尔发现,相同的源策略可能会阻止同一域上的子域之间的请求。因此,经过几次搜索,我可以通过在JavaScript中添加document.domain来解决这个问题。例如:     document.domain =&#39; example.com&#39;;

我还将JavaScript的顶部更改为:

$("#loading").show();
                    document.domain = 'example.com'; 
                      $.ajax({
                        type: "GET",
                        url: "/articles/feed/",
            //url will load http://www.example.com/articles/feed/
                        dataType: "xml",
                        success: parseXml
});