Ajax Jquery xml数据的请求需要在django的后端运行

时间:2017-02-19 00:31:48

标签: javascript jquery python ajax django

我正在尝试下载BBC网站的热门故事。并将它们显示在HTML网页上。以前我试过通过javascript中的ajax来做到这一点。但是,我得到的错误是:

“XMLHTTPRequest无法加载我的页面,因为请求的资源上没有'Access-Control-Allow-Origin'标头。因此不允许访问。”

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

我今天大部分时间一直没有成功,所以想知道是否有人可以帮助我或转发给我一些可以的链接!

我目前的代码如下:

News.js:

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

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

{% load staticfiles %}
<!DOCTYPE html>
<html>
	<head>
		<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>
	</head>
	<body>
		<h1>Top News: BBC versus CNN</h1>
		<input type="submit" id="btn" value="Refresh"></imput> 
		<ul id="TopNews"></ul>
	</body>
</html>

Views.py:views

1 个答案:

答案 0 :(得分:0)

您可以使用Python requests library之类的内容在views.py中创建请求(您的pic.view图片看起来像urls.py):

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添加到您的页面中,就像您在示例中一样。