2017-02-19 49 views
0

我正在尝试下载BBC网站的热门故事。并将它们显示在HTML网页上。以前我试图通过javascript中的ajax来做到这一点。但是,我得到的错误如下:Ajax Jquery xml数据请求需要在django后端运行

“XMLHTTPRequest无法将我的页面加载为不存在Access-Control-Allow-Origin'标头存在于请求的resource.cso中因此不允许访问。“

我做了一些更多的研究,并发现,因为我在Django中这样做,我需要使用我的views.py文件而不是ajax从URL请求对象。

我一直在研究今天的大部分,没有成功,所以想知道如果有人可以帮助我或转发我的一些链接,可以!

我当前的代码如下:

News.js:

$(document).ready(function(){ 
 
\t 
 
\t function an(){ 
 
\t \t $("#TopNews").append("<ul></ul>"); 
 
\t \t $.ajax({ 
 
\t \t \t type: "GET", 
 
\t \t \t url: "http://rss.cnn.com/rss/cnn_topstories.rss", 
 
\t \t \t dataType: "xml", 
 
\t \t \t success: function upon_success (xml) { 
 
\t \t \t \t if(response.status === "success"){ 
 
\t \t \t \t \t $(xml).find('item').each(function(){ 
 
\t \t \t \t \t \t var Titles = $(this).find('title').text(); 
 
\t \t \t \t \t \t $("<li></li>").html(Titles).appendTo("#TopNews ul"); 
 
\t \t \t \t \t }); 
 
\t \t \t \t } 
 
\t \t \t \t else if (response.status === "error"){ 
 
\t \t \t \t \t alert("The XML File could not be processed correctly."); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t }); 
 
\t }; 
 

 
\t $("#btn").click(an); 
 
});
Html: 
 

 
{% load staticfiles %} 
 
<!DOCTYPE html> 
 
<html> 
 
\t <head> 
 
\t \t <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
     <script type="text/javascript" src={% static "js/News.js" %}></script> 
 
\t </head> 
 
\t <body> 
 
\t \t <h1>Top News: BBC versus CNN</h1> 
 
\t \t <input type="submit" id="btn" value="Refresh"></imput> 
 
\t \t <ul id="TopNews"></ul> 
 
\t </body> 
 
</html>

Views.py:views

回答

0

你可以在views.py请求(您的pic的views.py看起来像urls.py)通过使用像Python requests library

import requests 

def your_view(request): 
    xml_news = requests.get('<your url>') 
    news = #maybe some parsed version of your xml 
    return render(request, 'your_page.html', {'news': news}) 

然后,你可以改变你的模板中包含类似:

{% for item in news %} 
    <li>{{ item }}</li> 
{% endfor %} 

否则,使用你的JavaScript将XML添加到您的网页就像你在你的例子都有。