Javascript 如何使用AJAX刷新Django页面的一部分?
我正在使用Django部署一个网站。有一个名为“论坛”的应用程序,支持我的网站上的讨论论坛 讨论论坛的url为“XXX.com/forum/roomY”。我想在用户单击刷新按钮时刷新此页面上的div id=''chat'',其中包括消息列表。我想使用AJAX来实现这一点 但是我发现我无法调用函数updatestatementlist(request)来检索更新的消息列表,以便将其传递给该页面上的 /forum/views.py def updatestatementlist(请求):Javascript 如何使用AJAX刷新Django页面的一部分?,javascript,jquery,html,django,ajax,Javascript,Jquery,Html,Django,Ajax,我正在使用Django部署一个网站。有一个名为“论坛”的应用程序,支持我的网站上的讨论论坛 讨论论坛的url为“XXX.com/forum/roomY”。我想在用户单击刷新按钮时刷新此页面上的div id=''chat'',其中包括消息列表。我想使用AJAX来实现这一点 但是我发现我无法调用函数updatestatementlist(request)来检索更新的消息列表,以便将其传递给该页面上的 /forum/views.py def updatestatementlist(请求): log.d
log.debug("call statementlist function")
statements = Statement.objects.filter(discussion=discussion)
return render(request, 'forum/statementlist.html', {
'statements': statements
})
我看不到日志信息,因此我认为单击按钮无法调用此函数
def your_view_func(request, *args, **kwargs):
if request.is_ajax():
...
return render(request, <your_ajax_template>)
return render(request, <your_normal_template>)
讨论论坛的主html页面为/forum/discussion.html,位于模板文件夹下。我按照建议将div id=“chat”中的html代码提取到一个单独的html/forum/statementlist.html,以及其他几个SO帖子
/forum/discussion.html
<button id = "Refresh"> Refresh </button>
<div id="chat">
{% include 'forum/statementlist.html' %}
</div>
{% load mptt_tags %}
{% recursetree statements %}
// display each statement
{% endrecursetree %}
forum.js
//When users click the refresh button
$("#Refresh").on("click", function(event){
alert("Refresh clicked")
$.ajax({
url: '',
type: "GET",
success: function(data) {
alert("success")
var html = $(data).filter('#chat').html();
$('#chat').html(html);
}
});
});
我还在这个AJAX请求中尝试了几个其他url:{%url updatestatementlist%},{%url'updatestatementlist%}。但我认为它应该设置为空,因为我不想被重定向到另一个url。讨论论坛的url为“XXX.com/forum/roomY”,单击此页面上的刷新按钮,我只想刷新div并从服务器获取更新的语句列表
顺便说一句,我可以看到两个警报后,我点击按钮
/forum/url.py
urlpatterns = [
...
url(r'^(?P<label>[\w-]{,50})/$', views.discussion_forum, name='discussion_forum'),
url(r'^(?P<label>[\w-]{,50})/$', views.statementlist, name='statementlist'),
urlpatterns=[
...
url(r'^(?P[\w-]{,50})/$,views.discussion\u forum,name='discussion\u forum'),
url(r'^(?P[\w-]{,50})/$',views.statementlist,name='statementlist'),
]
/forum/views.py def discussion_forum()用于在用户首次到达此论坛时加载所有信息
我想我的问题可能是1)AJAX是错误的;2) url错误,因此无法调用updatestatementlist()
有人能帮我吗?谢谢!如果您需要任何其他信息,请告诉我
与此相关的软件包:
Django==1.9.3
django mptt==0.8.7在客户端,将请求头设置为
X-request-With
设置为XMLHttpRequest
,django使用此特定头来确定它是否是Ajax请求:
以下是Django源代码的一个片段:
定义此标头后,需要将一个逻辑层添加到视图函数中
def your_view_func(request, *args, **kwargs):
if request.is_ajax():
...
return render(request, <your_ajax_template>)
return render(request, <your_normal_template>)
为什么X-request-With而不是HTTP\u-X\u-request-With?
请求中的HTTP头通过将所有字符转换为大写、将任何连字符替换为下划线并在名称中添加HTTP_uu前缀
来转换为元键
关于如何编写ajax,您能更具体一些吗?谢谢我是javascript新手。谢谢。我添加了beforeSend属性,但我仍然认为按刷新按钮无法将ajax请求发送到views.py/updatestatementlist()。因为在updatestatementlist中,我有两个分支:if或else request.is_ajax()。不显示来自两个分支的日志信息。可能是我的url模式错了吗?我不会对AJAX请求使用
include
标记,它只在页面加载时加载一次,尝试使用DjangoJsonResponse
获取JSON数据,然后通过向元素注册onclick
事件来动态添加html数据。
$.ajax({
type: "GET",
beforeSend: function(request) {
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
},
...
});