Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用AJAX刷新Django页面的一部分?_Javascript_Jquery_Html_Django_Ajax - Fatal编程技术网

Javascript 如何使用AJAX刷新Django页面的一部分?

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

我正在使用Django部署一个网站。有一个名为“论坛”的应用程序,支持我的网站上的讨论论坛

讨论论坛的url为“XXX.com/forum/roomY”。我想在用户单击刷新按钮时刷新此页面上的div id=''chat'',其中包括消息列表。我想使用AJAX来实现这一点

但是我发现我无法调用函数updatestatementlist(request)来检索更新的消息列表,以便将其传递给该页面上的

/forum/views.py def updatestatementlist(请求):

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
标记,它只在页面加载时加载一次,尝试使用Django
JsonResponse
获取JSON数据,然后通过向元素注册
onclick
事件来动态添加html数据。
$.ajax({
  type: "GET",
  beforeSend: function(request) {
    request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
  },
  ...
});